搜索邮箱:如何从Exchange用户邮箱中查找和删除电子邮件

时间:2020-01-09 10:46:53  来源:igfitidea点击:

Exchange服务器允许管理员搜索数据库中的用户邮箱,并从邮箱中删除某些电子邮件(或者其他项目)。例如,某个用户不小心将私人数据发送给中的其他用户,并且无法及时在Outlook中重新调用此电子邮件。信息安全部门要求我们作为Exchange管理员,从Exchange组织中的所有用户邮箱中删除此电子邮件。在本文中,将很好地展示如何使用PowerShell搜索Exchange用户邮箱(按不同条件)以及从特定用户或者所有Exchange用户的邮箱中删除某些电子邮件。下述技术适用于Exchange 2015、2013和2010.

如何分配权限以通过Exchange邮箱进行搜索?

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

  • 邮箱导入导出
  • 邮箱搜索

我们可以使用EAC或者以下PowerShell命令来分配角色:

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

分配角色后,重新启动Exchange命令行管理程序控制台。

使用搜索邮箱搜索和删除Exchange用户邮箱中的邮件

我们还可以使用Exchange控制面板或者Exchange管理中心在用户邮箱中搜索电子邮件项目,但是这种搜索方法非常慢,并且不允许我们删除电子邮件。使用PowerShell进行搜索要容易得多。

若要搜索用户邮箱中的电子邮件项目,可以使用" Search-Mailbox" cmdlet,该cmdlet允许我们在所有或者特定邮箱中搜索满足某些条件的项目,将找到的项目复制到另一个邮箱中或者将其删除。

首先,让我们考虑一下如何使用Search-Mailbox cmdlet查找内容。要在邮箱中搜索具有特定主题的项目,请运行以下命令:

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

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

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

要将搜索结果复制到某个邮箱和文件夹,请使用TargetMailbox或者TargetFolder参数。因此,搜索完成后,我们可以使用Outlook或者OWA手动查看找到的项目。假设我们需要在用户列表(在users.txt中给出)中搜索电子邮件,然后将找到的项目复制到特定邮箱的文件夹中。为此,请运行以下命令:

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

LogOnly参数表示仅在不将项目复制到目标邮箱或者删除邮件的情况下,才可以估计搜索结果。如果使用此参数,则包含搜索结果的报告将发送到指定的目标邮箱。报告是已存档的CSV文件,其中列出了符合搜索条件的邮箱。

我们可以使用EstimateResultOnly参数来估算搜索结果。请注意,使用此参数时,我们无需指定目标邮箱或者文件夹。

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

让我们从特定Exchange服务器上所有邮箱中的发件人[email protected]中删除所有电子邮件:

Get-Mailbox –Server berl-ex1 –ResultSize unlimited | Search-Mailbox -SearchQuery 'from:"[email protected]"' –DeleteContent –Force

在使用-DeleteContent参数从邮箱中删除邮件之前,强烈建议我们使用-EstimateResultOnly或者LogOnly参数浏览找到的电子邮件。

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

-SearchDumpster:$false

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

搜索邮箱:搜索查询示例

让我们考虑使用SearchQuery参数查找电子邮件的搜索查询示例。 SearchQuery关键字使用" KQL"(关键字查询语言)https://docs.microsoft.com/ru-ru/sharepoint/dev/general-development/keyword-query-language-kql-syntax-reference来处理查询。

要从所有电子邮件用户(而不是域)中删除电子邮件主题中所有包含关键字"秘密"的电子邮件,请执行以下操作:

Search-Mailbox -Identity k.peterson -SearchQuery 'Subject:"Secret" and from<>”theitroad.local”' -DeleteContent

查找和删除附件超过20 MB的所有电子邮件:

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

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

-SearchQuery {Size -gt 30MB}

我们可以同时在电子邮件的主题和正文中搜索文本。例如,让我们查找和删除主题中包含"新年"或者电子邮件正文中包含"白兰地"的所有消息。

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

我们可以使用"实物"参数在邮箱中搜索某些元素,例如:

会议:

-SearchQuery "Kind:meetings"

联系人:

-SearchQuery "Kind:contacts"

通过特定的收件人或者发件人搜索电子邮件:

-SearchQuery 'from:"[email protected]" AND to:"[email protected]"'

我们可以搜索带有特定文件作为附件的邮件:

-SearchQuery 'attachment:"annual_report2016.pdf"'

或者按文件类型:

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

我们可以按发送/接收日期进行搜索,但是有一些细微差别。使用日期作为搜索条件时,必须考虑Exchange服务器的区域设置。例如,可以通过以下方式之一指定2019年4月10日:

  • 10/04/2019
  • 2019年04月10日
  • 2019年4月10日
  • 10 /四月/ 2019

如果看到错误

The KQL parser threw an exception…

运行Search-Mailbox命令时,表示我们使用了错误的日期格式。

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

-SearchQuery sent:04/10/2019

如果需要指定日期范围(正在查找指定时间段内收到的消息):

-SearchQuery {Received:04/01/2019..04/11/2019}

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

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

搜索邮箱Cmdlet限制

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-Mailboxcmdlet或者通过邮箱数据库或者Exchange服务器将邮箱分为几组。

Get-Mailbox -Database berl-ex1 | Search-Mailbox –SearchQuery 'from:[email protected]' -DeleteContent –Force

搜索邮箱的另一个问题是其性能低下。如果是大型,搜索可能会持续几天。

如何使用New-ComplianceSearch在Exchange 2016中快速查找和删除电子邮件?

在Exchange 2016中,出现了一种新方法,该方法使我们可以快速查找和删除用户邮箱中的电子邮件。

使用以下命令,可以大大缩小搜索范围:

New-ComplianceSearch -Name FastSearch1 -ExchangeLocation all -ContentMatchQuery 'from:"[email protected]"'  
Start-ComplianceSearch -Identity FastSearch1  

这些命令在几分钟内搜索数千个邮箱。

接下来,我们需要获取符合搜索条件的邮箱列表:

$search = Get-ComplianceSearch –Identity FastSearch1  
$results = $search.SuccessResults  
$mbxs = @()  
$lines = $results -split '\[\r\n\]+'  
foreach ($line in $lines)  
{  
if ($line -match 'Location: (\S+),.+Item count: (\d+)' -and $matches\[2\] -gt 0)  
{  
$mbxs += $matches\[1\]  
}  
}  

现在,我们只能在找到的邮箱中使用Search-Mailbox cmdlet删除电子邮件:

$mbxs | Get-Mailbox| Search-Mailbox -SearchQuery 'from:"[email protected]"' -DeleteContent –Force

搜索和删除的总时间减少了数倍,尤其是在大型中。

现在,我们可以删除搜索结果:

Remove-ComplianceSearch –Identity FastSearch1