如何在PowerShell中过滤AD组输出的成员详情
提取AD组及仅含用户名的成员列表
要解决AD组成员字段包含OU/DC信息的问题,有两种实用方法:
方法一:正则快速提取(适合批量处理)
直接通过字符串处理从DistinguishedName中提取CN部分(或仅用户名),速度快,无需额外查询AD:
保留CN=前缀
Get-ADGroup -Filter * -Properties Members | Select-Object CN, @{ Name = 'Members' Expression = { $_.Members | ForEach-Object { ($_ -split ',')[0] } } }
仅提取用户名(去掉CN=)
Get-ADGroup -Filter * -Properties Members | Select-Object CN, @{ Name = 'Members' Expression = { $_.Members | ForEach-Object { if ($_ -match '^CN=([^,]+)') { $matches[1] } } } }
方法二:通过AD查询获取准确属性(更可靠)
如果需要确保成员信息的准确性(比如处理重名用户、特殊DN格式),可以通过Get-ADUser查询用户的CN或SamAccountName:
Get-ADGroup -Filter * -Properties Members | ForEach-Object { $group = $_ $memberList = $group.Members | ForEach-Object { # 替换为SamAccountName可获取登录名 (Get-ADUser $_ -Properties CN).CN } [PSCustomObject]@{ GroupName = $group.CN Members = $memberList -join '; ' } }
注意事项
- 方法一依赖DN格式的一致性,如果AD中存在非标准DN(比如包含逗号的CN),可能需要调整正则表达式。
- 方法二会额外查询AD,处理大量组时速度稍慢,但结果更精准。
内容的提问来源于stack exchange,提问作者zanisss
相关产品推荐
相关产品推荐

