如何使用PowerShell获取Active Directory用户及对应组成员身份
原脚本无输出的核心原因
- 变量语法错误:PowerShell管道对象属性的标准写法是
$_.属性名,原脚本错写为$._属性名,同时存在属性拼写错误:distinguishedName被错写为distinguisedName,导致变量取值全部为空。 - 命令逻辑错误:
Select-Object未接收输入对象,且将用户所属的所有组对象嵌套在单个GroupName字段中,既无法正常输出,也不符合「每个用户所属组单独占一行」的格式要求。
可直接运行的正确脚本
以下脚本会递归查询所有AD用户的全量组成员关系(含嵌套组),输出格式完全匹配要求:
# 提前加载AD模块 Import-Module ActiveDirectory Get-ADUser -Filter * -Properties MemberOf | ForEach-Object { $currentUser = $_.Name Get-ADPrincipalGroupMembership -Identity $_.DistinguishedName | ForEach-Object { [PSCustomObject]@{ Name = $currentUser GroupName = $_.Name } } } | Format-Table -AutoSize
如果需要将结果导出为CSV文件,把最后一行Format-Table -AutoSize替换为以下命令即可:
| Export-Csv -Path ".\AD用户组对应关系.csv" -NoTypeInformation -Encoding UTF8
可选:仅查询用户直接隶属组(不含嵌套)
如果不需要递归获取嵌套组,只需要用户直接加入的组,可以用解析MemberOf属性的方式实现,执行效率更高:
Import-Module ActiveDirectory Get-ADUser -Filter * -Properties MemberOf | ForEach-Object { $currentUser = $_.Name $_.MemberOf | ForEach-Object { # 从组的可分辨名称中提取组名 $groupName = $_.Split(',')[0].Replace('CN=','') [PSCustomObject]@{ Name = $currentUser GroupName = $groupName } } } | Format-Table -AutoSize
运行注意:请使用具备AD读取权限的域账号,在已加入域的设备上打开PowerShell执行上述脚本。
内容的提问来源于stack exchange,提问作者Dipronil Dey
相关产品推荐
相关产品推荐

