You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 15:23:13