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

如何在PowerShell导出的通讯组列表中添加嵌套成员计数列?

解决PowerShell导出AD组/通讯组信息并统计嵌套成员总数的问题

原代码逻辑问题说明

你的原代码存在逻辑错误:Get-ADGroup遍历指定OU的组后,在ForEach-Object中执行Get-DistributionGroup -Filter *会导致每个AD组都重复导出所有通讯组的信息,而非针对当前AD组对应的通讯组进行处理。

修正并添加成员统计的代码

# 替换为你的目标OU路径
$OUpath = "OU=目标OU,DC=你的域名,DC=com"
# 替换为你的CSV导出路径
$exportPath = "C:\powershell\DistributionLists\SecurityGroups.csv"

Get-ADGroup -Filter * -SearchBase $OUpath | ForEach-Object {
    # 通过AD组的唯一标识匹配对应的通讯组
    $distGroup = Get-DistributionGroup -Identity $_.DistinguishedName -ErrorAction SilentlyContinue
    if ($distGroup) {
        # 获取包含嵌套成员的总数,处理无成员或权限异常场景
        $totalMembers = (Get-DistributionGroupMember -Identity $distGroup.Id -Recursive -ErrorAction SilentlyContinue).Count
        # 构造包含新增统计列的输出对象
        [PSCustomObject]@{
            Id                                  = $distGroup.Id
            Name                                = $distGroup.Name
            PrimarySmtpAddress                  = $distGroup.PrimarySmtpAddress
            RequireSenderAuthenticationEnabled = $distGroup.RequireSenderAuthenticationEnabled
            TotalNestedMembers                  = $totalMembers ?? 0
        }
    }
} | Export-Csv -Path $exportPath -NoTypeInformation -Append

关键调整说明

  1. 逻辑修正:通过AD组的DistinguishedName精准匹配对应的通讯组,避免重复导出所有通讯组的冗余操作
  2. 嵌套成员统计:使用Get-DistributionGroupMember -Recursive获取所有层级的嵌套成员,通过Count统计总数;添加-ErrorAction SilentlyContinue避免因组无成员、权限不足等问题中断脚本执行
  3. 新增列处理:用[PSCustomObject]构造输出对象,新增TotalNestedMembers列,通过?? 0确保无成员时显示0而非空值
  4. 性能优化:将所有结果统一通过管道导出到CSV,避免循环内重复调用Export-Csv带来的性能损耗

内容的提问来源于stack exchange,提问作者sj1986

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:02:46