使用PowerShell导出AD组时MemberOf显示异常,需获取组名与DN分析嵌套
解决AD组嵌套排查脚本的MemberOf显示问题
原脚本的核心问题
MemberOf属性返回的是父组可分辨名称的数组,直接导出CSV时,PowerShell会将数组显示为System.String[],这就是你看到的异常内容。- 你需要获取的是组自身的可分辨名称(
DistinguishedName),但原脚本未选择该属性,且错误处理了MemberOf的输出格式。
修正后的脚本(两种常用格式)
格式1:展开每个嵌套关系为单独行(推荐用于层级分析)
这种格式会把每个子组-父组的嵌套关系拆成单独一行,方便后续梳理嵌套层级:
Get-ADGroup -Filter * -Properties MemberOf | Where-Object { $_.MemberOf -ne $null } | ForEach-Object { # 遍历当前组的所有父组,生成独立条目 foreach ($parentDN in $_.MemberOf) { [PSCustomObject]@{ 组名 = $_.Name 组可分辨名称 = $_.DistinguishedName 所属父组可分辨名称 = $parentDN } } } | Export-Csv -Path "C:\Users\XXXXX\Documents\NestedGroups_2.csv" -NoTypeInformation -Encoding UTF8
格式2:父组拼接为单行字符串(适合快速查看)
如果希望每组保留一行,把所有父组用分隔符拼接在一起:
Get-ADGroup -Filter * -Properties MemberOf | Where-Object { $_.MemberOf -ne $null } | Select-Object Name, @{Name='组可分辨名称'; Expression={$_.DistinguishedName}}, @{Name='所属父组列表'; Expression={$_.MemberOf -join ';'}} | Export-Csv -Path "C:\Users\XXXXX\Documents\NestedGroups_2.csv" -NoTypeInformation -Encoding UTF8
关键说明
- 添加
-NoTypeInformation可以避免CSV文件开头出现多余的类型注释行 - 指定
-Encoding UTF8能解决部分情况下CSV打开乱码的问题 - 若不需要过滤无父组的条目,可直接移除
Where-Object那一行
内容的提问来源于stack exchange,提问作者shawnb23
相关产品推荐
相关产品推荐

