如何在Exchange 2015/2013/2010中导入和导出邮箱到PST?
在Exchange Server 2010 SP1(及更高版本)中,出现了特殊的PowerShell cmdlet: New-MailboxImportRequestt和 New-MailboxExportRequest,允许我们从PST文件导入或者导出Exchange邮箱的内容。在以前的Exchange版本中,为了将数据从Exchange导入/导出到PST文件,必须使用第三方实用程序(通常使用ExMerge实用程序)。
在Exchange 2015、2013和Office 365中,Exchange开发团队继续开发用于导入/导出到PST文件的Exchange cmdlet,略微扩展了其功能并提高了其性能。在本文中,我们将介绍从Exchange邮箱导入/导出数据到个人文件夹文件(PST)的典型示例。
交换中的邮箱导入和导出权限
必须将RBAC角色“邮箱导入导出”分配给要将Exchange邮箱导入或者导出到PST的管理帐户(默认情况下,即使Exchange管理员也没有这些权限)。我们可以使用Exchange命令行管理程序将此角色分配给帐户:
New-ManagementRoleAssignment –Role "Mailbox Import Export" –User fr_exchange_admin
其中
fr_exchange_admin
–是获得“邮箱导入导出”角色权限的帐户的名称。
为了便于管理,“邮箱导入导出”角色通常分配给AD安全组。稍后,如果必须将此权限授予其他用户,则只需将该用户帐户添加到此域组即可。在本例中,命令语法稍有不同(假设AD组的名称为ExchangeAdmGroup):
New-ManagementRoleAssignment -Role "Mailbox Import Export" -SecurityGroup ExchangeAdmGroup
通过将邮箱导入导出分配给所需的用户或者组,可以从 EAC(Exchange administration Center)图形界面执行相同的操作。
授予RBAC权限后,重新启动EAC或者Management Shell控制台。
New MailboxImportRequest:正在将PST Fie导入Exchange邮箱
若要将PST文件导入Exchange邮箱,除了RBAC权限外,还需要以下各项:
目标Exchange邮箱必须存在;
PST文件必须位于共享网络文件夹中,并且我们必须知道该文件的完整UNC路径(不要忘了,可以通过网络路径(如\PCName111\C$\PST)访问某台计算机上的本地文件\短信.pst);
执行导入操作的用户必须对包含PST邮件存档文件的网络文件夹具有NTFS读取权限。
使用以下命令将PST文件的内容从共享文件夹导入到用户的邮箱 usertest。
New-MailboxImportRequest -Mailbox usetest -FilePath \HQ-FS01\PST\usetest.pst
导入到目标框中时,将合并现有文件夹的内容,并将新文件夹添加到现有邮件文件夹结构中。
PST文件的内容不能导入到Exchange邮箱根目录,而可以导入到邮箱的一个现有文件夹中(例如“Old”mail)。例如,只需将“收件箱”文件夹的内容导入目标邮箱文件夹“旧邮件”:
New-MailboxImportRequest -Mailbox usetest -FilePath \HQ-FS01\PST\usetest.pst -TargetRootFolder "Old_mail" -IncludeFolders "#Inbox#"
运行import命令后,导入请求将排队等待Exchange服务器处理(处理在具有客户端访问服务器角色的服务器上执行)。要查看导入请求队列,请运行以下命令:
Get-MailboxImportRequest
某个邮箱的导入请求任务状态(正在进行、已完成、已排队)可按如下方式获取:
Get-MailboxImportRequest mailtst
要获取有关导入请求状态的信息(以百分比为单位),请运行以下命令:
Get-MailboxImportRequest | Get-MailboxImportRequestStatistics
可以使用以下命令从队列中删除已完成的导入请求:
Get-MailboxImportRequest -Status Completed | Remove-MailboxImportRequest
要将电子邮件项目从PST文件大容量导入多个用户邮箱,可以使用以下命令(假定PST文件的名称对应于用户邮箱的名称):
Foreach ($i in (Get-Mailbox)) { New-MailboxImportRequest -Mailbox $i -FilePath "\\HQ-FS01\PST\$($i.Alias).pst" }
如果导入过程失败,则可以从生成的报告中获取详细信息,说明其原因,如下所示:
<br></br>Get-MailboxImportRequest -Status Failed | Get-MailboxImportRequestStatistics -IncludeReport | Format-List > AllImportReports.txt
在大多数情况下,导入错误发生的原因是:
- PST文件结构的逻辑损坏(如何使用scanpst.exe);
- 如果用户邮箱大小超过指定的限制。
可以指定导入过程中可以跳过的PST文件中的错误项数。以下命令将从PST文件导入到Exchange邮箱中,并跳过前十个失败项,然后生成导入错误:
New-MailboxImportRequest -Mailbox mailtst -FilePath \\HQ-FS01\PST\usetest.pst -BadItemLimit 10
New-MailboxExportRequest:导出Exchange邮箱到PST文件
Exchange邮箱内容的导出类似于导入。导出邮箱的内容为PST文件,使用New-MailboxExportRequestcmdlet。要将mailtst用户的邮箱导出到共享网络文件夹(该目录必须事先创建,并且必须为Exchange受信任子系统域组授予对该文件夹的读写权限),执行以下命令:
New-MailboxExportRequest –Mailbox mailtst –FilePath \\HQ-FS01\ExportPST\mailtst.pst
如果你必须导出一个PST文件,只导出来自特定文件夹的电子邮件项目,例如收件箱,命令是这样的:
New-MailboxExportRequest –Mailbox mailtst –FilePath \\HQ-FS01\ExportPST\mailtst.pst -IncludeFolders “#Inbox#”
要排除导出文件夹,请使用ExcludeFolders参数。例如,您不需要将删除的项目导出到PST文件:
New-MailboxExportRequest –Mailbox mailtst –FilePath \\HQ-FS01\ExportPST\mailtst.pst -ExcludeFolders “#DeletedItems#”
让我们考虑一个更复杂的任务:假设,您必须导出2019年1月1日以后收到的所有电子邮件,其中包含关键字“Project”和“London”。
New-MailboxExportRequest –Mailbox mailtst –FilePath \\HQFS01\ExportPST\mailtst.pst –ContentFilter {(body –like “*Project*”) –and {body –like “*London*”) –and (Received –lt “01/01/2019”)}
还可以仅从具有搜索邮箱搜索结果的特定文件夹导出项,该搜索邮箱的搜索结果是使用搜索邮箱cmdlet获得的。
导出任务请求也在Exchange服务器上排队。需要查看导出任务状态,使用命令:
Get-MailboxExportRequest -Mailbox "mailtst" | Format-List
RunspaceId : 3233f0d3-1b4b-4610-b0a2-6f29a543cc54 FilePath : \HQFS01\ExportPST\mailtst.pst SourceDatabase : db1 Mailbox : Name : MailboxExport RequestGuid : e03de01f-3333-111a-95fa-23faaf97ebf9 RequestQueue : db1 Flags : IntraOrg, Push BatchName : Status : Completed Protect : False Suspend : False Direction : Push RequestStyle : IntraOrg OrganizationId : Identity : mailtst\MailboxExport IsValid : True ObjectState : New
不要忘记定期清理已完成的邮箱导出到PST文件的请求:
Get-MailboxExportRequest -Status Completed | Remove-MailboxExportRequest
将用户邮箱导出为PST文件时,不会清除Exchange服务器上的用户邮箱内容。
您可以批量导出多个用户邮箱。创建以下格式的csv文本文件:
Username, UNCPathtoPst<br></br>t.holland,\\HQFS01\ExportPST\holland.pst<br></br>d.orr,\\HQFS01\ExportPST\orr.pst
将用户邮箱导出到PST文件:
Import-CSV "C:\ps\user_list_export_pst.csv" | ForEach {New-MailboxExportRequest -Mailbox $_.username -FilePath $_.UNCPathtoPst