PowerShell校验AD用户组成员身份无法导出CSV结果该如何解决
PowerShell批量校验用户组成员身份并导出CSV的修复方案
原代码核心错误点
Write-Host仅会将内容输出到控制台,不会返回任何对象赋值给$a,最终导出时$a为空无有效内容- 逻辑结构嵌套错误,获取组成员的循环和遍历用户的逻辑嵌套混乱,
$members会被每一个组的查询结果反复覆盖 Export-Csv要求输入为结构化的PowerShell对象,直接传入纯文本字符串无法生成规范的CSV表格- 若你的
UserInfo.csv/groupInfo.csv是带表头的标准CSV文件,使用gc(Get-Content)读取会把整行当做字符串,需要改为Import-Csv读取后取对应列值
修正后的可用代码
# 读取用户和组列表,如果你的CSV有表头,比如用户名列叫SamAccountName,就改成 (Import-Csv .\UserInfo.csv).SamAccountName $users = Get-Content .\UserInfo.csv $groups = Get-Content .\groupInfo.csv # 定义结果数组存储结构化数据 $results = @() foreach ($group in $groups) { # 先获取当前组的所有成员账号 $groupMembers = Get-ADGroupMember -Identity $group -Recursive | Select-Object -ExpandProperty SamAccountName # 遍历所有用户校验成员身份 foreach ($user in $users) { # 构造结构化对象,方便导出CSV $result = [PSCustomObject]@{ 用户名 = $user 目标用户组 = $group 成员身份校验结果 = if ($groupMembers -contains $user) { "是组成员" } else { "非组成员" } } # 将对象加入结果数组 $results += $result # 控制台也可以同步打印结果,不需要就删掉下面一行 Write-Host "$user 校验结果:$($result.成员身份校验结果),所属组:$group" } } # 导出结果到CSV,指定编码防止中文乱码 $results | Export-Csv -Path .\Output.csv -NoTypeInformation -Encoding UTF8 Read-Host -Prompt "Press Enter to exit"
注意事项
- 如果你的CSV文件是带表头的格式,需要把读取文件的部分替换为
Import-Csv,比如用户CSV的用户名列是账号,就写$users = (Import-Csv .\UserInfo.csv).账号 - 代码已经默认加了
-Encoding UTF8参数,避免导出的CSV中文乱码 - 最终导出的CSV会包含用户名、目标用户组、校验结果三列,可直接用Excel打开
内容的提问来源于stack exchange,提问作者ScriptingisLife
相关产品推荐
相关产品推荐

