如何在Office 365中使用PowerShell Get-MessageTrace命令

PowerShell Get-MessageTrace 命令可帮助 Office 365 管理员跟踪电子邮件消息的传递和处理,以确保消息能够成功投递到用户的邮箱中。在本文中,我将向您展示如何使用 Get-MessageTrace 命令来管理和分析 Office 365 中的电子邮件消息追踪。

使用 PowerShell Get-MessageTrace 与 Exchange Online

Get-MessageTrace cmdlet 是管理员在 Exchange Online 中分析和管理电子邮件流量的默认方法。然而,这个 PowerShell 命令仅适用于 Exchange Online(Office 365 的一部分)环境中。

在Exchange本地环境中,Get-MessageTrace PowerShell命令不可用,您的替代方法是Get-MessageTrackingLog cmdlet。Get-MessageTrace PowerShell命令提供了与本地环境对应的类似功能,但是,该cmdlet专门设计用于基于云的Office 365环境。

Exchange本地与Exchange Online消息跟踪: 主要区别

  1. 环境: Exchange本地处理组织自己的服务器,而Exchange Online是由Microsoft提供的基于云的服务。
  2. 集成: 在Exchange Online中,Get-MessageTrace命令与Office 365的安全性和合规性功能无缝集成,而在本地环境中,必须使用Get-MessageTrackingLog cmdlet。
  3. 身份验证: 由于Exchange Online的基于云的特性,身份验证方法和PowerShell会话的管理方式有所不同。
  4. 可扩展性: Exchange Online的可扩展性设计用于处理大量电子邮件工作负载,无需进行本地硬件升级。

连接到Exchange Online

这是一个快速提醒:要使用任何Exchange Online cmdlet,您需要在Office 365环境中建立一个远程PowerShell会话。打开Windows PowerShell并运行以下命令。

Connect-ExchangeOnline
Using Connect-ExchangeOnline to get connected to your tenant (Image credit: Petri/Michael Reinders)

你已经习惯了吧?如果您需要更多关于连接所需先决条件的帮助,请阅读我之前关于如何连接到Exchange Online的帖子。

使用具有特定日期范围的Get-MessageTrace

在特定日期范围内分析电子邮件流量是一项常见的管理任务。 Get-MessageTrace cmdlet使您能够根据电子邮件的创建或交付日期对电子邮件进行过滤和审查。请注意,此PowerShell命令可以访问的历史最长为10天。如果您需要调查早于10天前的电子邮件流量,您将需要使用Exchange管理中心网站并运行更长时间段的消息跟踪。

广告

以下是如何使用Get-MessageTrace cmdlet在特定日期范围内搜索消息的逐步指南。

过去 x 分钟

‘StartDate’ 参数用于指定要搜索的时间范围。您可以输入日期(最多不超过10天)。但是,您也可以包括时间。请确保将您的日期/时间范围用引号括起来(“”)。

让我们尝试使用Get-MessageTrace cmdlet 来搜索过去 90 分钟内的电子邮件:

Get-MessageTrace -StartDate "08/15/2023 10:45 AM" -EndDate "08/15/2023 12:15 PM"
Using the Get-MessageTrace cmdlet to trace email message flow (Image credit: Petri/Michael Reinders)

I’ll remind you that I am using my Microsoft 365 Developer tenant, so there’s not a lot of email activity occurring. If you get no output, it simply means that no email traffic records were returned. This can be completely normal.

广告

您还可以使用更复杂的 PowerShell 命令来回溯 45 分钟,如下:

Get-MessageTrace -StartDate (Get-Date).AddMinutes(-45) -EndDate (Get-Date)

让我发送几封电子邮件,这样您就可以看到输出在您的环境中是如何工作的。

过去 x 小时

现在,这很重要 – Exchange Online 几乎肯定会记录电子邮件传递时间的 UTC 时间!因此,我需要调整我的结束日期时间,并向您展示如何进行调整。

让我们搜索过去 8 或 9 小时内的电子邮件:

Get-MessageTrace -StartDate "08/15/2023 10:45 AM" -EndDate "08/15/2023 7:00 PM"
We need to use UTC times when computing our search window! (Image credit: Petri/Michael Reinders)

这就是!这显示了另一个帐户发送给我的主要全局管理员帐户的电子邮件。我在输入这些内容时,大约在下午 12:15 发送了该电子邮件(CDT)。但是,UTC 是快 5 小时。这就是为什么该电子邮件行报告在下午 5:16(UTC)时交付的原因。请牢记这个时间差异!

过去 x 天

虽然我没有任何电子邮件传递记录,但我仍然可以向您展示该命令。如果您想显示通过 Exchange Online 处理的所有电子邮件,您只需包括日期即可。

Get-MessageTrace -StartDate 08/05/2023 -EndDate 08/15/2023
We can go back a maximum of 10 days with PowerShell! (Image credit: Petri/Michael Reinders)

这样。因为我在这个租户中配置了Azure AD Connect Cloud Sync,所以我每周会收到一封带有状态更新的电子邮件。该电子邮件是在2023年8月8日发送的。

再次提醒,您只能搜索最多10天前的内容。如果您需要查看更早的记录,您需要使用Exchange管理中心网站上的消息跟踪功能。在那里,您可以创建一个请求,以查看多达90天前的记录。

使用Get-MessageTrace按发件人电子邮件地址搜索

识别特定发件人发送的邮件可能对各种目的至关重要,比如调查通信模式或解决安全问题。Get-MessageTrace cmdlet允许您搜索特定电子邮件地址的消息跟踪。

以下是如何使用“-SenderAddress”参数搜索特定发件人的消息跟踪:

Get-MessageTrace -SenderAddress "[email protected]"
We can use ‘SenderAddress’ to narrow things down (Image credit: Petri/Michael Reinders)

很酷,又有一个。漂亮而直观。而且,一个很好的提示 – 如果你将结果导入Format-List cmdlet,你将得到一个包括交付状态、消息ID、消息跟踪ID、发件人地址、收件人地址等等的优秀结果摘要。

We can use Format-List to get even more details (Image credit: Petri/Michael Reinders)

使用Get-MessageTrace按收件人电子邮件地址搜索

跟踪发送给特定收件人的电子邮件是管理员的另一个基本任务。无论您是管理电子邮件传递还是确保敏感信息传达给正确的人,按收件人电子邮件地址搜索的能力都是无价的。

让我们举个例子,这里我们将搜索所有发送给…我的电子邮件地址的电子邮件:

Get-MessageTrace -RecipientAddress "[email protected]"
We can also narrow things down by recipients of email (Image credit: Petri/Michael Reinders)

这显示了发送到我的电子邮件地址的3封电子邮件。另外,顺便说一句,如果您不包括任何与时间相关的参数,它将报告过去48小时内的情况。

您可以使用Get-MessageTrace按电子邮件主题搜索吗?

很遗憾,您无法使用Get-MessageTrace命令按主题搜索。为此需求,您将需要利用Microsoft Purview并创建一个eDiscovery(内容)搜索。您可以在我们的关于eDiscovery的先前文章中找到更多信息。

使用Get-MessageTrace按源和目的地IP地址搜索

您还可以使用Get-MessageTrace命令按源和目的地IP地址进行搜索。这使您可以根据发送和接收服务器的IP地址跟踪电子邮件消息。这对于诊断交付问题、识别可疑活动以及了解消息通过电子邮件基础设施的路径非常有用。

在这里,我们还可以使用“-ToIP”和“-FromIP”参数。例如,如果我们想要搜索所有来自44.42.2.55源IP并且我们边缘防火墙的公共IP接收电子邮件,101.3.2.88,我们可以使用以下命令作为示例。

Get-MessageTrace -ToIP "4.42.2.55" -FromIP "101.3.2.88"
You can also search by IP addresses amongst the SMTP servers in question (Image credit: Petri/Michael Reinders)

再次强调,我这里没有非常酷的内容向您展示,但它有效。真的,它有效。

如何使用通配符和部分匹配

您还可以使用通配符字符来高效地缩小结果范围。例如,出于安全或合规原因,假设您的合规官员想要查看过去48小时内从Gmail处理的所有电子邮件记录。易如反掌!

Get-MessageTrace -SenderAddress *@gmail.com

看,这样做非常容易。您也可以对收件人执行相同操作。如果您想查看发送至以字母“m”开头的所有电子邮件地址的所有电子邮件,请尝试以下命令:

Get-MessageTrace -RecipientAddress m*@x3v6p.onmicrosoft.com

同样,这非常直接。

如何使用Get-MessageTraceDetail获取更详细的结果

如果您希望扩展Get-MessageTrace命令的输出,您会很高兴得知Get-MessageTraceDetail cmdlet可以扩展输出,并显示电子邮件事务的个体处理和传递事件。让我向您展示。

首先,我将运行Get-MessageTrace cmdlet,并将其管道传输到‘Format-List’(fl)命令以获取一些详细信息。

Get-MessageTrace | fl
We can get more detail with the ‘Format-List’ (fl) cmdlet (Image credit: Petri/Michael Reinders)

在过去的48小时内,我们可以看到4封电子邮件的更多细节。因此,我们可以提取第二封电子邮件中的消息跟踪 ID 和收件人地址,然后使用以下命令:

Get-MessageTraceDetail -MessageTraceID e4f33ded-b67f-49b8-9a00-08db9dbb953a -RecipientAddress [email protected]
Using Get-MessageTraceDetail to get line-by-line detail for specific email messages (Image credit: Petri/Michael Reinders)

在这里,我们可以看到构成从互联网到梅根实际 Exchange 邮箱的电子邮件接收和投递的3个事件。这里提供了非常详细的信息。这可能显示一封消息是直接投递到用户的垃圾邮件文件夹,还是自动转发到另一个内部(或外部)邮箱。总的来说,这对 IT 专业人员和 Exchange 管理员非常有帮助。

如何将结果导出到 CSV 文件

通常情况下,您将运行报告许多记录的搜索。您肯定会想要使用 Excel 来分析和过滤结果。要做到这一点,只需通过 Export-CSV 命令将结果导出到 CSV 文件,就像这样:

Get-MessageTrace | Export-CSV AllEmailsInLast48Hours.csv
Exporting output to a CSV file (Image credit: Petri/Michael Reinders)

这只花了几秒钟。非常好!

如何使用 Group-Object 执行高级搜索

您可以使用Group-Object cmdlet来更高层次地查看我们的电子邮件投递。

最活跃的电子邮件发送者

您可以使用以下命令查找在过去7天内发送了最多电子邮件的用户。让我展示给您这个命令,然后我会解释它。

Get-MessageTrace -StartDate (Get-Date).AddDays(-10) -EndDate (Get-Date) | Group-Object -Property SenderAddress | Select Name,Count | Sort Count -Descending
We can find the most active senders with some more PowerShell piping! (Image credit: Petri/Michael Reinders)

在这里,我们首先收集过去10天内处理的电子邮件的完整列表。然后,我们获取该输出并使用Group-Object命令,使用属性’SenderAddress’,获取计数(电子邮件数量),并按最高数量进行排序。

接收最多电子邮件的收件人

类似地,我们可以通过运行相同的命令并将’SenderAddress’属性替换为’RecipientAddress’,快速收集在过去10天内收到最多电子邮件的用户。让我们看看会发生什么:

Get-MessageTrace -StartDate (Get-Date).AddDays(-10) -EndDate (Get-Date) | Group-Object -Property RecipientAddress | Select Name,Count | Sort Count -Descending
Similarly, we can find the users receiving the most email (Image credit: Petri/Michael Reinders)

I do love how powerful and simple PowerShell can be. Now, we have the information. Again, the data in this tenant is VERY low. You will undoubtedly see more robust results when you run these commands in your tenant.

Get-MessageTrace cmdlet提供了灵活性和控制

无论您需要在特定日期范围内搜索,识别特定发件人的消息追踪,还是跟踪发送给特定收件人的消息追踪,Get-MessageTrace 命令提供了您所需的灵活性和控制能力。此外,将结果导出到 CSV 文件的能力增强了您分析和记录电子邮件通信模式的能力。通过精通 Get-MessageTrace 命令的使用,您可以有效管理电子邮件流量,并深入了解组织的通信活动。

Source:
https://petri.com/powershell-get-messagetrace/