当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 从所有 Exchange 邮箱中删除特定电子邮件或电子邮件

作者:精品下载站 日期:2024-12-14 08:13:47 浏览:15 分类:玩电脑

从所有 Exchange 邮箱中删除特定电子邮件或电子邮件


您是否曾被要求从 Exchange 环境中的所有邮箱中删除不需要的电子邮件?是否有人向整个公司发送了一封电子邮件,然后试图撤回?或者,也许一种新病毒通过附件的方式进入了所有邮箱。我经常遇到这种情况,因此我将引导您完成扫描所有邮箱并删除不需要的电子邮件的步骤。有不同的策略可以实现此目的,但以下策略应该可以满足您的需求。

所有突出显示的示例都对邮箱数据库使用 ForEach 循环,因为大型环境在检索所有邮箱时通常会耗尽内存。这假设每个数据库的邮箱少于 1000 个。该命令的强大功能在于搜索查询,并且能够仅包含符合您的操作标准的电子邮件。所有示例均假设您已连接到 Exchange 命令行管理程序。

步骤#1:首先需要一个具有适当访问角色的用户帐户来搜索和删除。我使用安全服务帐户来执行这些任务,这样它们就不会由我自己的帐户完成。所需的两个角色是邮箱导入导出邮箱搜索。默认情况下,邮箱导入导出管理角色不包含在任何内置角色组中。因此,这将向您展示如何创建具有所需 2 个角色的角色组。


New-RoleGroup -Name "Mailbox Scanning" -Roles "Mailbox Import Export", "Mailbox Search" -Members YourServiceAccount

步骤#2a:此时,我们可以搜索电子邮件并记录结果、搜索并删除结果,或两者兼而有之。此示例搜索所有邮箱并根据您的搜索查询删除电子邮件。可以根据您的需要调整搜索查询,可以在此处找到有关语法的更多信息。

$databases = Get-MailboxDatabase
ForEach ($database in $databases) {
	$mailboxes = Get-Mailbox -Database $database
	ForEach ($mailbox in $mailboxes)
	{ Search-Mailbox $mailbox.identity -SearchQuery Subject:'The Subject Of The Email You Want To Delete', From:'The Sender', Received:'Today' -DeleteContent -Force}
}

步骤#2b:如果您想先测试搜索并删除,下面将简单地记录您的搜索结果。

$databases = Get-MailboxDatabase
ForEach ($database in $databases) {
	$mailboxes = Get-Mailbox -Database $database
	ForEach ($mailbox in $mailboxes)
	{ Search-Mailbox $mailbox.identity -SearchQuery Subject:'The Subject Of The Email You Want To Log', From:'The Sender', Received:'Today' -TargetMailbox administrator -TargetFolder "SearchAndDeleteLog" -LogOnly -LogLevel Full}
}

步骤#2c:以下搜索所有邮箱并删除电子邮件并记录结果。我更改了搜索查询以突出显示名为“ILoveYou*”的附件的搜索。这将查找文件名前缀带有 ILoveYou 的任何附件。

$databases = Get-MailboxDatabase
ForEach ($database in $databases) {
	$mailboxes = Get-Mailbox -Database $database
	ForEach ($mailbox in $mailboxes)
	{ Search-Mailbox $mailbox.identity -SearchQuery attachment:ILoveYou* -TargetMailbox administrator -TargetFolder "SearchAndDeleteLog" -LogOnly -LogLevel Full -DeleteContent -Force}
}

步骤#2d:以下操作将删除与您的搜索查询匹配的所有电子邮件,但会在每次删除之前提示您。这是通过从 Search-Mailbox 命令中删除 -Force 来实现的。

$databases = Get-MailboxDatabase
ForEach ($database in $databases) {
	$mailboxes = Get-Mailbox -Database $database
	ForEach ($mailbox in $mailboxes)
	{ Search-Mailbox $mailbox.identity -SearchQuery Subject:'The Subject Of The Email You Want To Delete', From:'The Sender' -DeleteContent}
}

步骤#2e:下面重点介绍了一种更简单的方法,适用于邮箱占用空间较小的环境,而无需循环访问数据库。默认情况下,Get-Mailbox 命令的结果大小为 1000 个邮箱。将 -ResultSize 设置为 Unlimited 允许我们搜索所有邮箱。

Get-Mailbox -ResultSize Unlimited | Search-Mailbox -SearchQuery Subject:'The Subject Of The Email You Want To Delete', From:'The Sender' -DeleteContent

步骤#2f:以下重点介绍根据请求使用服务器名称而不是邮箱。我更喜欢使用邮箱数据库,因为它们通常包含较少的用户。如果服务器在您的环境中工作得更好,您可以使用以下方法:

$servers = Get-MailboxServer
ForEach ($server in $servers) {
	$mailboxes = Get-Mailbox -Server $server
	ForEach ($mailbox in $mailboxes)
	{ Search-Mailbox $mailbox.identity -SearchQuery Subject:'The Subject Of The Email You Want To Delete', From:'The Sender' -DeleteContent}
}

与往常一样,请对您的场景发表评论,我将用解决方案更新博客文章。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯