You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell正则提取指定组的用户权限信息问题求助

解决PowerShell中提取指定组的用户权限信息问题

你当前的代码仅匹配到目标组的标题行,因为Select-String默认只返回符合模式的单行,没有捕获组标题之后的用户权限内容。以下是两种可行的解决方案:

方案一:使用多行正则匹配(推荐)

直接对整个$user_access字符串执行正则匹配,一次性提取目标组及其下属的所有用户权限内容:

$groupSelected = "group2"
# 构建正则模式,匹配目标组标题及后续非组标题的有效行
$pattern = "^@$groupSelected`n(?:(?!^@).+`n?)+"
# 启用多行模式执行匹配,提取结果
$Result = [regex]::Match($user_access, $pattern, [System.Text.RegularExpressions.RegexOptions]::Multiline).Value
# 输出结果
$Result

正则模式说明:

  • ^@$groupSelected:匹配以@开头的目标组标题行(多行模式下^表示行首)
  • (?:(?!^@).+n?)+:非捕获组,匹配所有**不以@开头**的有效行((?!^@)`是负向前瞻,避免匹配下一个组的标题),`+`支持匹配多行,`n?`兼容最后一行无换行的情况

方案二:逐行遍历筛选

通过拆分字符串为行数组,定位目标组的起始行后,向后遍历直到遇到新组或空行:

$groupSelected = "group2"
$lines = $user_access -split "`n"
# 找到目标组所在的行索引
$startIndex = ($lines | Select-String "^@$groupSelected").LineNumber - 1
$endIndex = $startIndex
# 向后遍历,确定结束位置
while ($endIndex + 1 -lt $lines.Count -and $lines[$endIndex + 1] -notmatch "^@" -and $lines[$endIndex + 1].Trim() -ne "") {
    $endIndex++
}
# 提取并合并目标行
$Result = $lines[$startIndex..$endIndex] -join "`n"
$Result

两种方案执行后,都会得到你期望的结果:

@group2
user2 = read
user4 = readwrite
user5 = readwrite

内容的提问来源于stack exchange,提问作者sjqwer1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 09:02:15