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

求PowerShell脚本导出通讯组报表及脚本报错排查

Exchange通讯组报表导出脚本

脚本说明

该脚本依赖Exchange Online PowerShell模块,执行前需确保已连接Exchange Online。脚本将导出包含你需求字段的通讯组报表:通讯组显示名称、通讯组所有者、通讯组成员、最后活动日期(最后接收邮件日期)、成员数量、接收邮件数量(最近90天)、通讯组ID。

完整脚本

# 连接Exchange Online(未连接则自动执行)
if (-not (Get-Module -Name ExchangeOnlineManagement -ErrorAction SilentlyContinue)) {
    Install-Module -Name ExchangeOnlineManagement -Force -AllowClobber -Scope CurrentUser
}
Connect-ExchangeOnline -ShowBanner:$false

# 初始化结果存储数组
$reportResults = @()

# 遍历所有通讯组
foreach ($group in Get-DistributionGroup -ResultSize Unlimited) {
    # 获取通讯组所有者,多所有者用逗号分隔
    $groupOwners = if ($group.ManagedBy) {
        ($group.ManagedBy | ForEach-Object { (Get-Recipient $_).DisplayName }) -join ", "
    } else {
        "无"
    }

    # 获取通讯组成员及成员数量,多成员用逗号分隔
    $groupMembers = try {
        $members = Get-DistributionGroupMember -Identity $group.Identity -ResultSize Unlimited -ErrorAction Stop
        $memberCount = $members.Count
        ($members.DisplayName) -join ", "
    } catch {
        $memberCount = 0
        "获取失败或无成员"
    }

    # 统计最近90天内接收邮件数量及最后活动日期
    $messageTraceParams = @{
        RecipientAddress = $group.PrimarySmtpAddress
        StartDate        = (Get-Date).AddDays(-90)
        EndDate          = Get-Date
        ResultSize       = Unlimited
    }
    $messageTraces = Get-MessageTrace @messageTraceParams
    $receivedEmailCount = $messageTraces.Count
    $lastActivityDate = if ($messageTraces) {
        $messageTraces | Sort-Object ReceivedTime -Descending | Select-Object -First 1 -ExpandProperty ReceivedTime
    } else {
        "90天内无活动"
    }

    # 组装报表条目
    $reportEntry = [PSCustomObject]@{
        "通讯组显示名称"         = $group.DisplayName
        "通讯组所有者"           = $groupOwners
        "通讯组成员"             = $groupMembers
        "最后活动日期"           = $lastActivityDate
        "成员数量"               = $memberCount
        "接收邮件数量(最近90天)" = $receivedEmailCount
        "通讯组ID"               = $group.Guid.ToString()
    }

    $reportResults += $reportEntry
}

# 导出报表到当前目录下的CSV文件
$exportPath = Join-Path -Path $PWD.Path -ChildPath "通讯组报表_$(Get-Date -Format 'yyyyMMddHHmmss').csv"
$reportResults | Export-Csv -Path $exportPath -Encoding UTF8 -NoTypeInformation

Write-Host "报表已导出至: $exportPath"

# 断开Exchange Online连接
Disconnect-ExchangeOnline -Confirm:$false

原脚本错误说明

  1. 属性名语法错误:select Display Name中,Display Name不是Exchange对象的有效属性名,成员的显示名称属性应为DisplayName,正确写法是select DisplayName。
  2. 自定义字段逻辑倒置:原脚本把组名称赋值给Member字段,导致所有成员条目都显示组名,正确逻辑应该是将组名称作为独立字段,成员名称取自Get-DistributionGroupMember的DisplayName属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:45:38