PowerShell中按后缀将AD组名字符串拆分至两个数组的方案
处理AD组字符串拆分到Add/Remove数组的PowerShell方案
正则匹配方案
针对带" - add"/" - remove"后缀的AD组字符串,用多行正则可精准提取组名,完美适配含空格、连字符的组名:
# 示例输入字符串 $inputString = @" Group Name With Spaces - add Another-Group-With-Dashes - remove Third Group - add "@ # 提取需添加的组 $addGroups = [regex]::Matches($inputString, '^(.*?)\s+-\s+add$', [System.Text.RegularExpressions.RegexOptions]::Multiline) | ForEach-Object { $_.Groups[1].Value } # 提取需移除的组 $removeGroups = [regex]::Matches($inputString, '^(.*?)\s+-\s+remove$', [System.Text.RegularExpressions.RegexOptions]::Multiline) | ForEach-Object { $_.Groups[1].Value }
正则说明:
^/$:匹配每行的开头/结尾(需启用Multiline选项)(.*?):非贪婪匹配组名部分,避免过度匹配到后缀\s+-\s+:匹配组名和标识之间的空格+连字符+空格,兼容多空格情况
非正则遍历方案
如果对正则不熟悉,也可以用行拆分+结尾判断的方式实现:
# 示例输入字符串 $inputString = @" Group Name With Spaces - add Another-Group-With-Dashes - remove Third Group - add "@ # 拆分每行并过滤空行 $lines = $inputString -split "`n" | Where-Object { $_ -match '\S' } # 初始化数组 $addGroups = @() $removeGroups = @() # 遍历处理每行 foreach ($line in $lines) { if ($line.EndsWith(" - add")) { # 截取组名部分(减去" - add"的6个字符) $addGroups += $line.Substring(0, $line.Length - 6).TrimEnd() } elseif ($line.EndsWith(" - remove")) { # 截取组名部分(减去" - remove"的9个字符) $removeGroups += $line.Substring(0, $line.Length - 9).TrimEnd() } }
验证输出:
可添加以下代码查看结果:
Write-Host "Add groups:" $addGroups | ForEach-Object { Write-Host "- $_" } Write-Host "`nRemove groups:" $removeGroups | ForEach-Object { Write-Host "- $_" }
内容的提问来源于stack exchange,提问作者Trippin
相关产品推荐
相关产品推荐

