求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
原脚本错误说明
- 属性名语法错误:
select Display Name中,Display Name不是Exchange对象的有效属性名,成员的显示名称属性应为DisplayName,正确写法是select DisplayName。 - 自定义字段逻辑倒置:原脚本把组名称赋值给
Member字段,导致所有成员条目都显示组名,正确逻辑应该是将组名称作为独立字段,成员名称取自Get-DistributionGroupMember的DisplayName属性。
内容的提问来源于stack exchange,提问作者Kshitij Tripathi
相关产品推荐
相关产品推荐

