如何在EAC中按多个主题过滤Get-MessageTrace日志?
过滤特定主题的Office 365已发送邮件日志并导出CSV
嘿,没问题!要过滤特定主题的已发送邮件日志其实很简单,你只需要在现有的PowerShell脚本里添加主题匹配的逻辑就行。我给你两种常用的实现方式,你可以根据需求选:
方法1:用Get-MessageTrace自带的-Subject参数(快速直接)
这个参数支持通配符,适合模糊匹配主题里的关键词。比如你要找所有包含「Q3销售报告」的邮件,代码可以这么写:
# 保留你原来的Exchange Online连接代码 Connect-ExchangeOnline # 定义目标主题(*代表任意字符,实现模糊匹配) $targetSubject = "*Q3销售报告*" # 获取过去2天、指定发件人、已发送且符合主题的邮件日志 $filteredTrace = Get-MessageTrace -SenderAddress "your-account@contoso.com" ` -StartDate (Get-Date).AddDays(-2) ` -EndDate (Get-Date) ` -Status Sent ` -Subject $targetSubject # 导出为CSV格式(指定路径和编码,避免乱码) $filteredTrace | Export-Csv -Path "C:\YourLogsFolder\Sent_Email_Trace.csv" -NoTypeInformation -Encoding UTF8
方法2:用Where-Object做更灵活的过滤
如果需要更复杂的匹配规则(比如不区分大小写、正则表达式匹配),可以先用Get-MessageTrace拉取基础日志,再用Where-Object做本地过滤:
Connect-ExchangeOnline # 先拉取基础日志,再过滤主题 $filteredTrace = Get-MessageTrace -SenderAddress "your-account@contoso.com" ` -StartDate (Get-Date).AddDays(-2) ` -EndDate (Get-Date) ` -Status Sent | Where-Object { $_.Subject -match "Q3销售报告" } # -match默认不区分大小写,要区分用-cmatch # 导出CSV $filteredTrace | Export-Csv -Path "C:\YourLogsFolder\Sent_Email_Trace.csv" -NoTypeInformation -Encoding UTF8
实用小提示
- 若需精确匹配完整主题,直接去掉通配符,将
$targetSubject设为完全一致的主题文本即可 - 权限注意:确保你的PowerShell连接账户拥有「查看邮件追踪日志」的权限(Exchange管理员默认具备,普通用户可能需要额外授权)
- 效率优化:如果日志量较大,优先用方法1——它是在服务器端完成过滤,比拉取所有日志后本地过滤的效率高很多
内容的提问来源于stack exchange,提问作者Doug
相关产品推荐
相关产品推荐

