网站搜索

使用 PowerShell 在 Exchange Server (Microsoft 365) 上的用户邮箱中搜索和删除电子邮件


在 Exchange Server 中,您可以使用 Search-Mailbox 或 New-ComplianceSearch PowerShell cmdlet(在较新版本的 Exchange Server 和 Exchange Online/Microsoft 365 中提供)从用户邮箱中搜索和删除电子邮件项目。例如,用户意外地将私人数据发送给组织中的同事,并且没有时间在 Outlook 中撤回该消息。信息安全部门要求 Exchange 管理员从 Exchange 组织/租户中的所有用户邮箱中删除此私人电子邮件。

本文适用于本地 Exchange Server 2019/2016/2013 和 2010,以及基于云的 Exchange Online (Microsoft 365)。

搜索 Exchange 邮箱所需的权限

必须为搜索和删除邮箱项目的管理员帐户分配以下角色:

  • 邮箱导入导出

  • 邮箱搜索

您可以使用 EAC 或 PowerShell 分配角色。使用 PowerShell 连接到本地 Exchange Server 并运行命令:

New-ManagementRoleAssignment -User j.anderson -Role "Mailbox Import Export"
New-ManagementRoleAssignment -User j.anderson -Role "Mailbox Search”

在 Exchange Online 中,您需要分配以下角色:

Add-RoleGroupMember "Discovery Management" -member max@a-d.site
New-RoleGroup "Mailbox Import-Export Management" -Roles "Mailbox Import Export"
Add-RoleGroupMember "Mailbox Import-Export Management" -Member max@a-d.site

将您的帐户添加到 Microsoft 365 合规中心的电子数据展示管理员组

提示。您可以使用 Exchange Online PowerShell v2 (EXO V2) 模块连接到 Exchange Online。

分配角色后,重新启动 PowerShell 会话。

搜索邮箱:搜索并删除 Exchange 用户邮箱中的邮件

您可以使用 Exchange 管理中心 (EAC) Web 界面或 Search-Mailbox PowerShell cmdlet 搜索用户邮箱中的电子邮件项目。此命令允许您按特定条件搜索邮箱中的电子邮件、将找到的项目复制到另一个邮箱或将其删除。

要搜索用户邮箱中具有特定主题的电子邮件,请运行以下命令:

Search-Mailbox -Identity k.peterson -SearchQuery 'Subject:"Annual Report"'

要搜索 Exchange 组织中的所有邮箱,请使用以下命令:

Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery 'Subject:"Annual Report"'

在 Exchange Online (Microsoft 365) 中使用搜索邮箱 cmdlet 时,会出现警告:

WARNING:  On July 1, 2020, the Search-Mailbox cmdlet is being retired and Microsoft Support will no longer provide assistance.  See https://go.microsoft.com/fwlink/?linkid=2113221 to learn more. WARNING: The Search-Mailbox cmdlet returns up to 10000 results per mailbox if a search query is specified. To return more than 10000 results, use the New-MailboxSearch cmdlet or the In-Place eDiscovery & Hold console in the Exchange Administration Center.

微软建议使用更强大的

New-ComplianceSearch

和

New-ComplianceSearchAction

邮箱搜索 cmdlet(下面讨论)。

要将搜索结果复制到特定邮箱和文件夹,请使用TargetMailbox 或TargetFolder 参数。这将允许您在搜索完成后手动查看 Outlook 中找到的电子邮件。假设您需要在邮箱列表(在 users.txt 中给出)中搜索电子邮件并将找到的项目复制到特定邮箱中的文件夹中:

get-content users.txt | Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery 'Subject:"Annual Report"' -TargetMailbox sec_dept -TargetFolder "ExchSearchResult”

-LogOnly -LogLevel Full 选项表示只能估计搜索结果,而无需将项目复制到目标邮箱或删除邮件。如果使用此参数,包含搜索结果的报告将发送到指定的目标邮箱。报告是一个存档的 CSV 文件,其中列出了满足搜索条件的邮箱。

请注意,收到的报告包含电子邮件消息“读取状态”(

Read: True/False

)。

您可以使用 -EstimateResultOnly 参数估计搜索结果。请注意,使用此选项时,您不需要指定目标邮箱或文件夹。

Get-Mailbox | Search-Mailbox -SearchQuery 'Subject:"report"' -EstimateResultOnly|select Identity,ResultItemsCount,ResultItemsSize| Where-Object ResultItemsCount -gt 0

要删除找到的电子邮件项目,请使用-DeleteContent 参数。添加-Force参数以跳过确认提示

让我们删除特定 Exchange 服务器上所有邮箱中发件人 k.peterson@a-d.site 的所有电子邮件:

Get-Mailbox -Server berl-ex1 -ResultSize unlimited | Search-Mailbox -SearchQuery 'from:"k.peterson@a-d.site"' -DeleteContent -Force

在使用 -DeleteContent 参数从邮箱中删除电子邮件项目之前,我们强烈建议您使用

-EstimateResultOnly

或者

-LogOnly

论据。

要仅搜索已删除的项目,请添加 -SearchDumpsterOnly 参数(要排除在已删除的项目中搜索,请添加

-SearchDumpster:$false

争论)。如果需要从搜索结果中排除存档邮箱,请使用 -DoNotIncludeArchive 参数。

Search-Mailbox cmdlet 有一个重大限制:它只能返回 10,000 个元素。如果超过此限制,它将返回错误:

Sending data to a remote command failed with the following error message: The total data received from the remote client exceeded allowed maximum. Allowed maximum is 524288000.

为了删除更多项目,您必须多次运行 Search-Mailbox cmdlet 或按邮箱数据库或 Exchange 服务器将邮箱分组。

Get-Mailbox -Database berl-ex1 | Search-Mailbox -SearchQuery 'from:spam@spambot.org' -DeleteContent -Force

Search-Mailbox cmdlet 的另一个问题是其性能不佳。对于大公司,搜索可能需要几天的时间。在现代版本的 Exchange Server 和 Microsoft 365 中,最好使用 New-ComplianceSearch cmdlet(如下所述)来搜索电子邮件。

Exchange 邮箱的关键字搜索示例

让我们看一下使用 SearchQuery 参数查找电子邮件项目的搜索查询示例。 SearchQuery 参数以 KQL 格式(关键字查询语言)处理查询 https://docs.microsoft.com/en-us/sharepoint/dev/general-development/keyword-query-language-kql-syntax-reference。

要查找并删除来自非您域的所有用户的主题中包含关键字“Secret”的所有电子邮件,请执行以下操作:

Search-Mailbox -Identity k.peterson -SearchQuery 'Subject:"Secret" and from<>”a-d.site”' -DeleteContent

使用 OR 和 AND 逻辑运算符,您可以组合更复杂的电子邮件搜索条件。

查找并删除所有附件大于 20 MB 的电子邮件:

Search-Mailbox -Identity k.peterson -SearchQuery 'hasattachment:true AND Size >20971520' -DeleteContent

提示。电子邮件项目的大小以字节为单位指定,并且计算整个电子邮件项目的大小,而不仅仅是附件。您还可以指定大小(以兆字节为单位)。在这种情况下,使用以下语法:

-SearchQuery {Size -gt 30MB}

您可以同时搜索电子邮件主题和正文中的文本。例如,让我们查找并删除主题中包含“New Year”或电子邮件正文中包含“brandy”的所有邮件。

Search-Mailbox k.peterson -SearchQuery {Subject:"RE:New Year" OR body:"brandy"} -DeleteContent -Force

您可以使用 Kind 参数在邮箱中搜索特定项目。例如:

会议:

-SearchQuery "Kind:meetings"

联系方式:

-SearchQuery "Kind:contacts"

或其他 Outlook 元素:

  • 电子邮件

  • 会议

  • 任务

  • 笔记

  • 文档

  • 期刊

  • 联系方式

  • 我是

按特定收件人和发件人搜索电子邮件:

-SearchQuery 'from:"ceo@a-d.site" AND to:"support-team@a-d.site"'
  • 带附件的电子邮件:

    -SearchQuery 'hasattachment:true'
  • 已读邮件:

    -SearchQuery 'isread:false'
  • 按大小搜索电子邮件:

    -SearchQuery 'size>300000'

您可以查找带有特定文件作为附件的邮件:

-SearchQuery 'attachment:"annual_report2021.pdf"'

或者按文件类型:

-SearchQuery 'attachment -like:"*.docx"'

您可以按发送/接收日期进行搜索,但有一些细微差别。使用日期作为搜索条件时,必须考虑 Exchange Server 的区域设置。例如,2022 年 2 月 22 日可以通过以下方式之一指定:

  • 2022年2月22日

  • 2022年2月22日

  • 2022 年 2 月 22 日

  • 2022 年 2 月 22 日

如果您看到错误“

The KQL parser threw an exception…

” 当运行 Search-Mailbox 命令时,这意味着您使用了错误的日期格式。

要搜索在特定日期发送的电子邮件,请使用以下查询:

-SearchQuery sent:02/22/2022

如果您需要指定日期范围(您正在查找在指定时间段内收到的电子邮件项目):

-SearchQuery {Received:01/04/2022..02/20/2022}

这是另一个例子。我们来搜索 5 月 9 日之后收到的电子邮件:

-SearchQuery {Received:> $('05/09/2021')}

New-ComplianceSearch:如何在 Exchange 中搜索和删除电子邮件?

在 Exchange 2016/2019 和 Exchange Online (Microsoft 365) 中,您可以使用 New-ComplianceSearch 和 New-ComplianceSearchAction cmdlet 以新方式快速搜索和删除用户邮箱中的电子邮件。

Microsoft 建议使用这些 cmdlet 在 Exchange 中搜索电子邮件,而不是使用已弃用的 Search-Mailbox 命令。

连接到 M365 安全与合规中心:

Connect-IPPSSession

让我们尝试在邮箱中搜索具有特定主题、发件人和日期的电子邮件。

$Sender = "max@a-d.site"
$StartTime = "02/20/2022"
$EndTime = "02/22/2021"
$Subject = "report2022"

要根据指定条件创建电子邮件搜索任务,请运行:

New-ComplianceSearch -Name ContentSearch_Report2022 -ExchangeLocation all -ContentMatchQuery "sent>=$($StartTime) AND sent<=$($EndTime) AND sender:$($Sender) AND subject:$($Subject)"

您可以在 -ContentMatchQuery 属性中指定搜索条件,类似于 Search-Mailbox cmdlet 上的 -SearchQuery 选项。

这时经常会出现错误:

New-ComplianceSearchAction: The term 'New-ComplianceSearchAction' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

验证您是否已按上述方式分配所有 Exchange 角色。

关闭当前的 PowerShell 会话并重新连接:

Get-PSSession | Remove-PSSession

要运行此作业:

Start-ComplianceSearch -Identity ContentSearch_Report2022

你必须等待它完成。您可以像这样获取当前的搜索状态:

Get-ComplianceSearch -Identity ContentSearch_Report2022| FL name,items,size,jobprogress,status

要在预览模式下将搜索结果打印到控制台:

New-ComplianceSearchAction -SearchName ContentSearch_Report2022 -Preview
(Get-ComplianceSearchAction ContentSearch_Report2022| Select-Object -ExpandProperty Results).Split(";")

如果要从用户邮箱中删除所有找到的电子邮件项目,请使用-Purge选项(在 Exchange Online 中提供):

New-ComplianceSearchAction -SearchName ContentSearch_Report2022 -Purge -PurgeType SoftDelete

如果您想让用户恢复已删除的电子邮件,请使用

-PurgeType SoftDelete

选项。指定

-PurgeType HardDelete

从邮箱中完全删除项目。

现在您可以删除搜索结果:

Remove-ComplianceSearch -Identity ContentSearch_Report2022

相关文章