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

PowerShell邮件追踪需求:仅筛选外部收件人超2人的外发邮件

筛选外部收件人数量超过2人的外发邮件

原命令的问题在于,Get-MessageTrace会为邮件的每个收件人生成一条独立记录,直接过滤单个收件人是否为外部,会返回所有含外部收件人的单条记录,无法统计同一邮件的外部收件总数。

解决思路是先按邮件唯一标识MessageTraceId分组,统计每组中外部收件人的数量,再筛选出数量大于2的邮件:

# 1. 获取符合条件的外部收件人记录,按MessageTraceId分组并统计数量
$externalGroups = Get-MessageTrace -StartDate (Get-Date).AddDays(-10) -EndDate (Get-Date) -Status Delivered |
    Where-Object { $_.RecipientAddress -notmatch "@myorganisation.fr|@toto.fr" } |
    Group-Object -Property MessageTraceId |
    Where-Object { $_.Count -gt 2 }

# 2. 根据筛选出的MessageTraceId,获取完整的邮件追踪信息
Get-MessageTrace -StartDate (Get-Date).AddDays(-10) -EndDate (Get-Date) -Status Delivered |
    Where-Object { $externalGroups.Name -contains $_.MessageTraceId }

如果只需要输出邮件的关键信息(比如发件人、外部收件人列表、邮件主题),可以直接在分组后处理:

Get-MessageTrace -StartDate (Get-Date).AddDays(-10) -EndDate (Get-Date) -Status Delivered |
    Where-Object { $_.RecipientAddress -notmatch "@myorganisation.fr|@toto.fr" } |
    Group-Object -Property MessageTraceId |
    Where-Object { $_.Count -gt 2 } |
    ForEach-Object {
        [PSCustomObject]@{
            MessageTraceId = $_.Name
            SenderAddress = $_.Group[0].SenderAddress
            Subject = $_.Group[0].Subject
            ExternalRecipients = $_.Group.RecipientAddress -join ';'
            RecipientCount = $_.Count
        }
    }

关键说明

  • 使用Group-Object按MessageTraceId分组,同一邮件的所有外部收件人记录会被归为一组
  • 通过$_.Count判断该组的外部收件人数量,筛选出大于2的分组
  • 若需要完整的邮件追踪数据,可再次调用Get-MessageTrace并匹配筛选出的MessageTraceId

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 13:03:13