Get-MessageTrackingLog : 在Exchange server上搜寻邮件跟踪日志
可以使用 Exchange 命令行管理程序中的Get-MessageTrackingLog cmdlet 来分析邮件流、邮件取证并获取有关电子邮件组织中特定邮箱发送或接收的邮件的不同信息。在本文中,我将展示几个 PowerShell 单行命令示例,我经常使用这些命令来跟踪 Exchange Server 2016/2013/2010 和 Office 365 (Exchange Online) 上的消息。
让我提醒您,Exchange 传输日志位于该%ExchangeInstallPath%TransportRoles\Logs\MessageTracking文件夹中。在 Exchange 中分析邮件跟踪日志的最有效和最灵活的方法是使用 Get-MessageTrackingLog cmdlet。
首先,考虑可用于过滤日志中事件的主要 Get-MessageTrackingLog 参数。以下 cmdlet 参数最常用:
Sender——按发件人搜索;
recipients——按收件人搜索;
server——在特定的传输服务器上搜索;
start “11/30/2019 08:00:00” -end“ 12/18/2019 21:00:00”——搜索具体时间段;
MessageSubject — 按消息主题搜索;
EventID – 按 Exchange 事件搜索(通常使用以下代码:RECEIVE、SEND、FAIL、DSN、DELIVER、BADMAIL、RESOLVE、EXPAND、REDIRECT、TRANSFER、SUBMIT、POISONMESSAGE、DEFER);
messageID – 按消息 ID 跟踪。
如果在不带任何参数的情况下运行 Get-MessageTrackingLog cmdlet,则将显示过去 30 天 Exchange 传输日志中的所有事件。该 cmdlet 仅显示最后 1,000 个事件。要删除此限制,请使用–ResultSize Unlimited参数。(由于传输服务器上潜在的高负载,不建议在没有一些额外的过滤器参数的情况下执行此操作。)
您可以使用以下命令逐页显示有关 Exchange 事件的信息:
Get-MessageTrackingLog | Out-Host –Paging
例子1
-显示过去 24 小时 ( (Get-Date).AddHours(-24)) 的所有电子邮件,其中指定了来自 @gmail.com 域的收件人:
Get-MessageTrackingLog -Start (Get-Date).AddHours(-24) -ResultSize unlimited | where {[string]$_.recipients -like "*@gmail.com"}
例子2
-要显示特定用户在给定时间段内通过特定服务器发送的所有电子邮件
Get-MessageTrackingLog -ResultSize unlimited –Sender "cmansion@china.com” –server rome1 -Start "11/30/2019 06:00:00" -End "12/13/2019 22:00:00" |select-object Timestamp,Sender,Recipients,MessageSubject,EventId|ft
或者
Get-MessageTrackingLog -ResultSize unlimited –Sender "cmansion@china.com” –server rome1 -Start "11/30/2019 06:00:00" -End "12/13/2019 22:00:00" |fl
例子3
-我们查找一个用户发送给另一个用户的所有电子邮件,并将搜索结果导出到 CSV 文件中
Get-MessageTrackingLog -Sender "cmansion@china.com" -Recipients "amorato@china.com" -ResultSize unlimited –server rome | Select-Object Timestamp,Sender,{$_.recipients},MessageSubject | Export-Csv -Path "C:\Export\exchange\exchange_tracking_logs.csv" -Encoding Default -Delimiter ";"
例子4
-可以按邮件主题进行搜索。要在主题字段中显示所有带有“test”字样的电子邮件,请运行以下命令。(要在单独的图形窗口中将结果显示为具有方便排序、过滤和搜索功能的表格,
Get-MessageTrackingLog -MessageSubject "test" -ResultSize unlimited –server rome | Select-Object Timestamp,Sender, {$_.recipients}, MessageSubject | out-gridview
例子5
-您可以通过特定的邮件 ID 进行搜索(您可以从 Outlook 中的邮件标题中获取):
Get-MessageTrackingLog -messageID "41A4321C3543314FFFFF23122F2BDB7ABD00342@rome-hub-01.woshub.com" -ResultSize unlimited –server rome-hub-01| Select-Object Timestamp,Sender, {$_.recipients}, MessageSubject
例子6
查看那个邮件接收过程中因为那个邮件流阻挡
$mail= Get-MessageTrackingLog -Server rome -Start "2022/1/18 10:0:0" -End "2022/1/18 20:00:00 " -Sender xiang.zhang@china.com -Recipients zhe.chen@china.com
看 #AGENTINFO 的是那一条
$mail[-4].EventData
查看 AGENTINFO的数据 [-4]表示 #AGENTINFO 在倒数第四条
在显示的数据中看ruleid 这个id号基本是最后一条。在邮件发送之后,邮件会依照顺序匹配所有邮件流如果,没有成功则会阻止掉,所以一般都只看最后一条ruleid
Get-TransportRule 099dce9d-9782-4494-9208-f24d6f991a54