PowerShell从AD导出组与管理者信息生成有效JSON文件问题
解决AD组信息导出为有效JSON的问题
问题原因
你的代码在ForEach-Object循环中,每次将单个PSCustomObject转成JSON后追加到文件,生成的内容是多个独立的JSON对象——既没有被数组[]包裹,对象之间也没有逗号分隔,这直接导致JSON格式无效。
修正方案
正确做法是先把所有结果收集到一个数组中,最后一次性转换为标准JSON并写入文件,同时优化managedBy字段的处理逻辑:
# 初始化数组存储所有结果 $groupResults = @() Get-ADGroup -Filter * -Properties name,managedBy | ForEach-Object { $groupName = $_.Name $managedBy = $_.managedBy $managerName = 'N/A' if ($managedBy) { # 直接通过managedBy的DN获取对应AD对象,避免拆分CN的冗余操作 $managedByObject = Get-ADObject -Identity $managedBy -Properties ObjectClass, Name if ($managedByObject.ObjectClass -eq 'user') { $manager = Get-ADUser -Identity $managedBy -Properties Name $managerName = $manager.Name } elseif ($managedByObject.ObjectClass -eq 'group') { # 获取组成员名称并拼接为字符串 $memberNames = Get-ADGroupMember -Identity $managedByObject | Select-Object -ExpandProperty Name $managerName = $memberNames -join ';' } } # 将当前组的结果添加到数组 $groupResults += [PSCustomObject]@{ Name = $groupName ManagedBy = $managerName } } # 一次性转换为标准JSON格式并写入文件 $groupResults | ConvertTo-Json -Depth 3 | Set-Content -Path "C:\temp\$(Get-Date -Format yyyy-MM-dd)-groupowners.json"
关键优化点
- 统一生成JSON数组:先收集所有结果到数组,再整体转换为JSON,确保输出符合标准数组格式(包含
[]和对象间的逗号)。 - 简化对象获取逻辑:直接通过
managedBy的DN调用Get-ADObject,避免拆分CN的冗余步骤,降低出错概率。 - 提升代码可读性:调整变量命名和逻辑结构,让流程更清晰易懂。
内容的提问来源于stack exchange,提问作者szimmer
相关产品推荐
相关产品推荐

