前言
有时候,我们可能会遇到如下场景:
1. 用户或管理员由于误操作,向全公司发了一封邮件,事后才发现自己发错了。尽管可以通过邮件撤回功能减小此操作带来的负面影响,但是邮件撤回只能应用在对方还没有查看这封邮件的情况下,如果对方看过了,邮件撤回功能也就无力回天了。
2. 组织内收到了大量相同的垃圾邮件,如何批量且快速地从用户邮箱中删除这些垃圾邮件就显得非常有必要了。
鉴于存在以上的场景和并未罗列出来的类似场景中的需求,我给大家带来这篇文章,向大家讲述如何通过Exchange 2007 的Cmdlet来快速实现这个需求,也就是如何通过Exchange2007命令行管理程序Cmdlet批量删除包含特定主题或关键字的邮件。
(注:这里不对Exchange2003讨论,据我所知,类似的需求尽管能在Exchange2003中实现,但是比较麻烦。)
演示环境1. ExchangeServer & DC:dc.winos.cn
2. 已通过
administrator@winos.cn这个邮箱用户向组织内两个用户
zhangsan@winos.cn和
lisi@winos.cn群发了三封邮件,分别为:
主题为“通知”,正文为空的邮件;
主题为“艳照门”,正文为空的邮件
主题为“加薪水啦”,正文为“加薪”的邮件
如图1、2、3所示:
(图1)
(图2)
(图3)
操作步骤1. 要想实现“通过Cmdlet批量删除包含特定主题或关键字的邮件”这个功能,当前操作账号需要满足如下需求:
a. 该账号需属于Exchange Server 管理员角色以及源服务器和目标服务器的本地 Administrators 组
b. Exchange 收件人管理员角色
c. 该账号必须具备对其他人邮箱的读写权限。
前面两点很容易满足,直接使用默认个域管理员即可。当然前提是你没有对域管理员的权限进行过自定义修改。后面一点比较麻烦,因为默认情况下,域管理员和Exchange管理员并没有权限访问其他用户的邮箱。只有NT Authority\Self组才对自己的邮箱有完全访问权限,实际上这个组就代表经过身份验证的自己,换言之,也就是说缺省情况下,只有自己才能完全访问自己的邮箱,哪怕是域管理员、Exchange管理员也不行。所以在这个演示中,我们首要的工作就是将administrator这个用户赋予对张三和李四邮箱的完全访问权限。在这个演示中,我只有两个用户,很容易就将权限添加进去了,但是实际生产环境中的用户则远不是两个。且通过GUI界面无法批量操作,难道非得手工一个一个添加吗?岂不累死!这个时候,PowerShell的魅力就体验出来了,只需运行如下命令就可以将administrator赋予对张三和李四邮箱的完全访问权限,如图4:
Get-mailbox | Add-MailboxPermission -User administrator -AccessRights Fullaccess
(图4)
(注:
a. 运行如上命令后,你也许会在EMC中查看用户的完全访问权限是否生效,如果是这样,你可能会发现在图形界面并没有显示administrator拥有对张三和李四的完全访问权限,里面的权限条目仍只有NT Authority\Self,这是为什么?其实权限已经添加进去了。如何证明呢?最简单的办法是在图形界面下,再次赋予administrator对张三的完全访问权限,这个时候你会发现Exchange会提醒你已经存在此访问控制项ACE了,这就证明前面操作正确。其实,这种情况在Exchange2007中并不少见。例如在ADUC中修改send as权限后,在EMC中发现“代理发送”并没有出现相应的条目,但是实则也是生效了。
b. 如果在操作结束后,想撤回administrator对其他用户的完全访问权限,可以运行如下cmdlet,如图5:
Get-mailbox | Remove-MailboxPermission -User administrator -AccessRights Fullaccess
(图5)
2. 然后以administrator的身份登录OWA,建立一个文件夹,名字随便取。我这里命名为“垃圾回收站”。如图6.
(图6)
建立这个文件夹的目的是什么呢?顾名思义,我打算用它来保存后面演示抽取出来的邮件,也就是说我会把满足
特定主题的邮件抽取出来后放在administrator的这个文件夹里面。抽取完成后,可以根据需要删除或保留这个
文件夹里面的内容。
3. 完成上面赋权和新建文件夹操作后,我们就可以进入正题了。运行如下cmdlet,将满足特定关键字的邮件抽取出来,保存到administrator邮箱中的“垃圾回收站”目录,如图7
Get-Mailbox –Database "Mailbox Database" | Export-Mailbox -SubjectKeywords "艳照门" -TargetMailbox administrator@winos.cn -TargetFolder "垃圾回收站" –DeleteContent
(图7)
(注:
a. Mailbox Database请替换为实际的邮箱数据库名
b. 如果不加-DeleteContent参数,则只会将张三李四邮箱中的“艳照门”邮件复制一份到administrator的“垃圾回收站”中,这样不是很满足我们的需求,我们需要的是“剪切”,而不是“复制”,所以加上了这个参数
)
4. 用张三或李四的身份登入OWA,可以查看到以“艳照门”为主题的邮件的确不见了。如图8
(图8)
5. 以Administrator身份登入OWA,可以看到我们自定义的文件下“垃圾回收站”下多了两个子文件夹,保存的是从张三和李四处“回收”过来的邮件。如图9
(图9)
6. 上面是对主题关键字进行操作,下面我们来抽取符合特定正文关键字的邮件,运行如下cmdlet,如图10
Get-Mailbox –Database "Mailbox Database" | Export-Mailbox -ContentKey
words "加薪" -TargetMailbox
administrator@winos.cn -TargetFolder "垃圾回收站" -DeleteContent
(图10)
7. 以李四的身份登陆OWA,会发现主题为“加薪水啦”,正文为“加薪”的邮件被删除了。如图11.
8. 再次以Administrator身份登入OWA,会发现“垃圾回收站”下又多了两个文件夹,其中保存的是抽取到的“加薪”邮件。如图12
(图12)
9. 到现在为止,我们成功实现了删除所有用户邮箱中的指定邮件,而这一切不需要任何用户知道,一切几乎都是透明的。
至于如何处理提取出来的邮件,是删除还是保留就看你自己了。
结束语
通过以上演示,我们实现了通过Cmdlet批量删除包含特定主题或关键字的邮件。圆满完成任务。其实,
不只是可以针对主题和内容关键字过滤,还可以对邮件附件过滤。比如某一病毒程序向全公司发了一封
带毒的附件,这个时候就可以对邮件附件进行过滤了,凡是有这个文件名的附件都可以揪出来,杀之!
过多的应用场景就不讨论了,文中提到的一些cmdlet命令之详细用法和更多参数请参考Exchange的
帮助文档。谢幕!