导出域本地组成员时如何获取samAccountName而非distinguishedName
域本地组成员samAccountName查询修复方案
问题根源
AD组对象的member属性默认存储的是所有成员的distinguishedName值列表,并非成员的完整AD对象,因此直接替换属性名无法生效;且你原有代码中的[string]::j是未完成的表达式,本身无法返回正确结果。
修复代码
方案1:兼容原有ADSI写法(适配跨域成员查询场景)
# 替换为你实际的组名 $targetGroupName = "Name of Group" $groupPath = "LDAP://" + (Get-ADGroup $targetGroupName).DistinguishedName $groupObj = [ADSI]$groupPath # 遍历所有成员DN查询samAccountName $groupObj.member | ForEach-Object { $memberObj = [ADSI]"LDAP://$_" [PSCustomObject]@{ samAccountName = $memberObj.samAccountName[0] 成员类型 = $memberObj.objectClass[-1] 原始DN = $_ } } # 需要导出到CSV的话,在上一句末尾追加 | Export-Csv -Path "组成员列表.csv" -Encoding UTF8 -NoTypeInformation
方案2:AD模块原生写法(简单易用,已加载AD模块时优先用)
# 替换为你实际的组名,加-Recursive可展开嵌套组内的所有用户 Get-ADGroupMember -Identity "Name of Group" -Recursive | Select-Object samAccountName, Name, objectClass
注意事项
- ADSI返回的属性默认是集合类型,需加
[0]取第一个有效值,避免输出类型名称 - 若组包含跨域成员,方案1的兼容性优于方案2
- 导出CSV时指定UTF8编码可避免中文乱码
内容的提问来源于stack exchange,提问作者cpitis
相关产品推荐
相关产品推荐

