如何把Public Folder从Exchange Server 2010 迁移到Exchange Online
本文介绍了如何把Public Folder从Exchange Server 2010迁移到Exchange Online. 主要包含三个部分:准备工作,公共文件夹的迁移,以及验证迁移是否成功。其中第二部分公共文件夹的迁移包含了8个步骤,描述了迁移的具体流程以及实验截图。
第一部分. 准备工作:
1. Exchange 2010 服务器需要运行 Exchange 2010 SP3 RU8 或更高版本。
2. 在 Office 365 和 Exchange Online 中,您必须是”组织管理”角色组的成员。该角色组与订阅 Office 365 或 Exchange Online 时分配给您的权限不同。
3. 在 Exchange 2010 中,您必须是”组织管理”或”服务器管理”RBAC 角色组的成员。
4. 迁移之前,如果组织中有任何公用文件夹大于 2 GB,我们建议删除该文件夹的内容或者将其拆分为多个公用文件夹。
注意: 实际上,如果公共文件夹大于2GB并小于30GB,我们依然可以把此公共文件夹手动添加到迁移的列表中做迁移。 但是最佳实践就是把任何大于2GB的公共文件夹做拆分。
5. 在 Office 365 和 Exchange Online 中,您可以创建最多 100 个公用文件夹邮箱。如果您需要超过 100 个公用文件夹邮箱,请联系 Office 365 支持,以请求更多的公用文件夹邮箱,Office 365 支持将会评估您的请求。
6. 在迁移公用文件夹之前,我们建议您先将所有用户邮箱移动到 Office 365 和 Exchange Online.
注意: 如果是配置Exchange的混合共存环境,那么我们会有一个Exchange的共存阶段,在此阶段内,我们可以在本地Legacy Exchange服务器上创建空的邮箱数据库以及代理邮箱,并在Exchange Online这边把用户的Public Folder配置成远程访问(PublicFoldersEnabled和RemotePublicFolderMailboxes),让迁移到Exchange Online的用户通过代理邮箱远程访问本地的Public Folder.此选项和配置不在本文讨论范围内, 我们会再做另外的单独讨论。
7. 必须在旧版 Exchange 服务器上启用 Outlook 无处不在,我们可以使用Microsoft Remote Connectivity Analyzer来测试Outlook Anywhere.
https://testconnectivity.microsoft.com
第二部分:迁移公共文件夹
当前本地Exchange Server 2010服务器上的公共文件夹:
步骤1 : 下载公用文件夹迁移脚本。将这些脚本保存到您将运行 PowerShell 的本地计算机上。例如,C:\PFScripts。
https://www.microsoft.com/en-us/download/details.aspx?id=38407
步骤2A : 先决条件: Exchange Server 2010服务器上的先决条件步骤:
1.在旧版 Exchange 服务器上,确保可继续正常路由到将存在于 Office 365 或 Exchange Online 中的已启用邮件的公用文件夹,直到所有通过 Internet 的 DNS 缓存更新到指向您组织目前所在的 Office 365 或 Exchange Online DNS。为此,运行以下命令配置一个已知名称的接受域,它将会正确地将电子邮件消息路由到 Office 365 或 Exchange Online 域。
New-AcceptedDomain -Name “PublicFolderDestination_78c0b207_5ad2_4fee_8cb9_f373175b3f99” -DomainName Elmohae3.onmicrosoft.com -DomainType InternalRelay
2.如果公用文件夹的名称包含反斜线 \,在迁移发生时将在父公用文件夹中创建该公用文件夹。在迁移之前,我们建议您为名称中包含反斜线的公用文件夹重命名。
Get-PublicFolderStatistics -ResultSize Unlimited | Where {$_.Name -like “*\*”} | Format-List Name, Identity
如果有返回任何公用文件夹名称包含反斜线,您可以通过使用以下命令对它们进行重命名:
Set-PublicFolder -Identity <public folder identity> -Name <new public folder name>
3.确保之前没有成功迁移的记录。如果存在,则需要将该值设置为 $false。如果该值设置为 $true,则迁移请求将失败。
a.下面的示例检查公用文件夹迁移状态。
Get-OrganizationConfig | Format-List PublicFoldersLockedforMigration, PublicFolderMigrationComplete
b.如果 PublicFoldersLockedforMigration 或 PublicFolderMigrationComplete 属性的状态为 $true,请使用下面的命令将此值设置为 $false。
Set-OrganizationConfig -PublicFoldersLockedforMigration:$false -PublicFolderMigrationComplete:$false
注意: 在重置这些属性之后,必须等待 Exchange 检测到新设置。这可能需要两个小时才能完成。
或者我们可以重启Exchange Information Store让设置立即生效。
4.为在迁移结束时进行验证,我们建议您在旧版 Exchange 服务器上运行以下命令行管理程序命令,以获取当前公用文件夹部署的快照。
a.运行以下命令以获取原始源文件夹结构的快照。
Get-PublicFolder -Recurse | Export-CliXML C:\PFMigration\Legacy_PFStructure.xml、
b.运行以下命令以获取公用文件夹统计信息(如项目计数、大小和所有者)的快照。
Get-PublicFolderStatistics -ResultSize Unlimited | Export-CliXML C:\PFMigration\Legacy_PFStatistics.xml
c.运行以下命令获取权限的快照。
Get-PublicFolder -Recurse | Get-PublicFolderClientPermission | Select-Object Identity,User -ExpandProperty AccessRights | Export-CliXML C:\PFMigration\Legacy_PFPerms.xml
保存来自上述命令的信息以便在迁移结束时进行比较。
步骤2B : 先决条件: Exchange Online中的先决条件步骤:
1.请确保没有现有的公用文件夹迁移请求。如果有,请清除它们,否则您自己的迁移请求将会失败。并非所有情况都需要此步骤;只有在您认为管道中可能存在现有迁移请求时,才需要此步骤。
现有的迁移请求可以是下列两种类型之一:批处理迁移或串行迁移。用于检测每种类型请求和删除每种类型请求的命令如下所示。
下面的示例会发现任何现有的串行迁移请求。
Get-PublicFolderMigrationRequest | Get-PublicFolderMigrationRequestStatistics -IncludeReport | Format-List
如有发现任何现有的串行迁移请求,删除任何现有的公用文件夹串行迁移请求:
Get-PublicFolderMigrationRequest | Remove-PublicFolderMigrationRequest -Confirm:$false
下面的示例会发现任何现有的批处理迁移请求。
$batch = Get-MigrationBatch | ?{$_.MigrationType.ToString() -eq “PublicFolder”}
如有发现公用文件夹批处理迁移请求, 删除任何现有的公用文件夹批处理迁移请求:
$batch | Remove-MigrationBatch -Confirm:$false
2.确保 Office 365 中不存在任何公用文件夹或公用文件夹邮箱。
如果您在 Office 365 或 Exchange Online 中发现了公用文件夹,在删除公用文件夹和公用文件夹邮箱之前必须确定它们为什么存在以及您组织中的哪个人启动了公用文件夹层次结构,这一点至关重要。
a.在 Office 365 或 Exchange Online PowerShell 中,运行以下命令,检查是否存在任何公用文件夹邮箱。
Get-Mailbox -PublicFolder
b.如果该命令没有返回任何公用文件夹邮箱,请继续进行步骤 3:生成 .csv 文件。如果该命令返回了所有公用文件夹邮箱,则运行以下命令,看看是否存在任何公用文件夹:
Get-PublicFolder
c.如果 Office 365 或 Exchange Online 中有公用文件夹,则运行以下 Exchange Online PowerShell 命令将其删除。请确保您已保存了 Office 365 中公用文件夹内的任何信息。删除公用文件夹后,公用文件夹中包含的所有信息将永久删除。
Get-MailPublicFolder | where {$_.EntryId -ne $null}| Disable-MailPublicFolder -Confirm:$false
Get-PublicFolder -GetChildren \ | Remove-PublicFolder -Recurse -Confirm:$false
d.删除公用文件夹之后,运行以下命令删除所有公用文件夹邮箱。
$hierarchyMailboxGuid = $(Get-OrganizationConfig).RootPublicFolderMailbox.HierarchyMailboxGuid
Get-Mailbox -PublicFolder:$true | Where-Object {$_.ExchangeGuid -ne $hierarchyMailboxGuid} | Remove-Mailbox -PublicFolder -Confirm:$false
Get-Mailbox -PublicFolder:$true | Where-Object {$_.ExchangeGuid -eq $hierarchyMailboxGuid} | Remove-Mailbox -PublicFolder
再次确认是否删除成功:
步骤 3 : 生成 .csv 文件
1.在旧版 Exchange 服务器上,运行 Export-PublicFolderStatistics.ps1 脚本以创建文件夹名称到文件夹大小的映射文件。此脚本需始终由本地管理员运行。该文件具有两列:”FolderName“和”FolderSize“。”FolderSize“列的值将以字节为单位显示。例如”\PublicFolder01,10000“。
.\Export-PublicFolderStatistics.ps1 <Folder to size map path> <FQDN of source server>
FQDN of source server 等于托管公用文件夹层次结构的邮箱服务器的完全限定域名。
Folder to size map path 等于要用于保存 .csv 文件的网络共享文件夹上的文件名称和路径。主题后面部分中,您将需要使用 Exchange Online PowerShell 来访问此文件。如果您仅指定文件名,则将在本地计算机上的当前 PowerShell 目录中生成文件。
2.运行 PublicFolderToMailboxMapGenerator.ps1 脚本来创建公用文件夹到邮箱的映射文件。此文件用于计算 Exchange Online 中公用文件夹邮箱的正确数量。
.\PublicFolderToMailboxMapGenerator.ps1 <Maximum mailbox size in bytes> <Folder to size map path> <Folder to mailbox map path>
Maximum mailbox size in bytes 等于您要为新公用文件夹邮箱设置的最大大小。在 Exchange Online,公用文件夹邮箱的最大大小为 50 GB。我们建议您将此设置设置为 15 GB,以使每个公用文件夹邮箱都有增长的空间。如果单个公用文件夹超过了 2 GB,该公用文件夹不会添加到 .csv 文件。以下是一些供您选择的解决此问题的方法选项:
在运行脚本之前,删除公用文件夹内容,将大小减少到 2 GB 或 2 GB 以下。
在运行脚本之前,将公用文件夹拆分为多个公用文件夹,每个文件夹为 2 GB 或 2 GB 以下。
如果公用文件夹大于 2 GB 但不超过 30 GB,您可以在运行脚本之后将它手动添加到 .csv 文件。该公用文件夹将在 Exchange Online 中创建。
注意1: 如果公用文件夹大于 30 GB 并且删除内容或将它拆分为多个公用文件夹都不可行,我们建议您不要将此公用文件夹移动到 Exchange Online。
Folder to size map path 等于您在运行 Export-PublicFolderStatistics.ps1 脚本时创建的 .csv 文件的文件路径。
Folder to mailbox map path 等于通过此步骤创建的文件夹到邮箱 .csv 文件的文件名和路径。如果您仅指定文件名,则将在本地计算机上的当前 PowerShell 目录中生成文件。
注意2: 因为此测试环境的Public Folder比较小,因此在运行脚本时,我们只设置5GB,刚好本地所有Public Folder的size总和还没有超过5GB。因此此脚本会自动的把所有Public Folder规划放置到第一个Mailbox1中。CSV中FolderPath显示\为Public Folder的根目录,也就是包含了所有的Folders。 TargetMailbox就是此脚本帮助我们规划出的Exchange Online公共文件夹邮箱。也就是说,接下来,我们需要在Exchange Online新建的一个名称为Mailbox1的公共文件夹邮箱即可。
注意3: 当然,如果我们需要自定义Public Folder和Exchange Online PF mailbox的放置关系,我们也可以手动编辑此CSV,把指定的Public Folder规划到到指定的Exchange Online PF Mailbox中。 另外,我们也可以对TargetMailbox的名称做自定义修改,只要确保跟在下面的步骤4中我们在Exchange Online新建的Exchange Online PF mailbox的名称匹配即可。
步骤 4 : 在 Exchange Online 中创建公用文件夹邮箱
警告警告:
创建的公用文件夹邮箱的名称需与映射文件中的”TargetMailbox“的名称匹配。可以在映射文件中编辑”TargetMailbox“名称以符合组织的命名约定。
1.运行以下命令,以在 Exchange Online 中创建主公用文件夹邮箱。创建的第一个公用文件夹邮箱会成为主层次结构邮箱。需要在 HoldForMigration 模式下创建第一个公用文件夹邮箱。此外,Exchange 会自动将公用文件夹邮箱从服务层次结构中排除,因此 Exchange Online 用户将无法使用这些公用文件夹。
New-Mailbox -PublicFolder <Name> -HoldForMigration:$true
2.基于 PublicFoldertoMailboxMapGenerator.ps1 脚本生成的 .csv 文件,按需运行以下命令创建其他公用文件夹邮箱。例如,如果您打开 .csv 文件,公用文件夹命名为 Mailbox1、Mailbox2 等。如果最后一个公用文件夹命名为 Mailbox13,您将需要创建 13 个公用文件夹邮箱。可以创建的公用文件夹邮箱的最大数为 50。
如果您需要创建几个公用文件夹邮箱,可以编写脚本以便自动执行此进程。此示例将创建 15 个公用文件夹邮箱。
$numberOfMailboxes = 15;
For ($index = 2; $index -le $numberOfMailboxes; $index++)
{
$PFMailboxName = “Mailbox” + $index
New-Mailbox -PublicFolder $PFMailboxName
}
步骤5 : 启动迁移请求
1.在旧版 Exchange 服务器上,运行以下命令,将启用邮件的公用文件夹从本地 Active Directory 同步到 Exchange Online。
Sync-MailPublicFolders.ps1 -Credential (Get-Credential) -CsvSummaryFile:sync_summary.csv
Credential 是您的 Office 365 用户名和密码。CsvSummaryFile 是您要以 .CSV 格式记录同步操作和错误的文件路径。
注意: 我们建议您先模拟脚本操作,然后再实际运行此脚本(为此,可使用 -WhatIf 参数)。
在我们的测试环境中,因为没有启用邮件的公用文件夹,因此跳过此步。
2.在旧版 Exchange 服务器上,获取运行迁移请求所需的以下信息:
a.查找用户帐户的 LegacyExchangeDN,该用户帐户是”公用文件夹管理员”角色的成员。这将是此过程步骤 3 中您所需凭据的同一用户。
Get-Mailbox <PublicFolder_Administrator_Account> | Select-Object LegacyExchangeDN
b.查找具有公用文件夹数据库的任何邮箱服务器的 LegacyExchangeDN。
Get-ExchangeServer <public folder server> | Select-Object -Expand ExchangeLegacyDN
c.查找 Outlook 无处不在 主机名的 FQDN。如果您有多个 Outlook 无处不在 实例,我们建议您选择最接近迁移终结点的实例或最接近旧版 Exchange 组织中公用文件夹副本的实例。以下命令将找到 Outlook 无处不在 的所有实例:
Get-OutlookAnywhere | Format-Table Identity,ExternalHostName
把上面所获取到的3个值记录下来。
3.在 Office 365 PowerShell 中,运行以下命令,将前一步骤返回的信息传递到将在迁移请求中使用的变量。
a.将旧版 Exchange 服务器上具有管理权限的用户凭据传递到 $Source_Credential 变量中。Exchange Online 中运行的迁移请求将使用此凭据获取对旧版 Exchange 服务器的访问,以复制内容。
$Source_Credential = Get-Credential <source_domain\PublicFolder_Administrator_Account>
b.使用步骤 2a 中找到的旧版 Exchange 服务器上迁移用户的 ExchangeLegacyDN,将它传递到变量 $Source_RemoteMailboxLegacyDN 中。
$Source_RemoteMailboxLegacyDN = “<paste the value here>”
c.使用以上步骤 2b 中找到的公用文件夹服务器的 ExchangeLegacyDN,将它传递到变量 $Source_RemotePublicFolderServerLegacyDN。
$Source_RemotePublicFolderServerLegacyDN = “<paste the value here>”
d.使用以上步骤 2c 中找到的 Outlook 无处不在 的外部主机名,将它传递到变量 $Source_OutlookAnywhereExternalHostName 中。
$Source_OutlookAnywhereExternalHostName = “<paste the value here>”
注意: 在运行$Source_Credential = Get-Credential <source_domain\PublicFolder_Administrator_Account>时,会提示输入此本地Exchange管理员的密码 。
4.最后,在 Exchange Online PowerShell 中,运行以下命令,创建迁移请求。
注意: 以下命令行管理程序示例中的身份验证方法必须匹配您的 Outlook 无处不在 设置,否则命令将失败。
$PfEndpoint = New-MigrationEndpoint -PublicFolder -Name PublicFolderEndpoint -RPCProxyServer $Source_OutlookAnywhereExternalHostName -Credentials $Source_Credential -SourceMailboxLegacyDN $Source_RemoteMailboxLegacyDN -PublicFolderDatabaseServerLegacyDN $Source_RemotePublicFolderServerLegacyDN -Authentication Basic
New-MigrationBatch -Name PublicFolderMigration –CSVData (Get-Content <folder_mapping.csv> -Encoding Byte) –SourceEndpoint $PfEndpoint.Identity -NotificationEmails <email addresses for migration notifications>
其中 <folder_mapping.csv> 文件是在步骤 3:生成 .csv 文件中生成的。
在测试环境中,运行命令时,收到报错说已经有一个相同名称的公共文件夹的迁移批处理存在(收到此报错是因为之前我们在此环境已经做过公共文件迁移的测试), 如果我们用其他名称来创建新的迁移批处理,报错提示说只能有一个公共文件夹的批处理。因此,我们必须要删除掉已有的公共文件夹迁移批处理。
删除完成后,再次运行:
5.使用以下命令开始迁移:
Start-MigrationBatch PublicFolderMigration
尽管批处理迁移的启动需要使用命令行管理程序中的 New-MigrationBatch cmdlet,但是迁移的进度和完成情况可在 EAC 中进行查看和管理。因为 New-MigrationBatch cmdlet 可启动每个公用文件夹邮箱的邮箱迁移请求,您可以使用邮箱迁移页查看这些请求的状态。您可以进入邮箱迁移页,通过执行下列操作,创建可以通过电子邮件发送给您的迁移报告:
1.登录到 Exchange Online 并打开 EAC。
2.转到”邮箱”>“迁移”。
3.选择您刚刚创建的迁移请求,然后单击”详细信息”窗格中的”查看详细信息”。
第 6 步:锁定旧版 Exchange 服务器上的公用文件夹以供最终迁移(需要停机时间)
在迁移过程中的此步骤之前,用户都可以访问公用文件夹。后续步骤会将用户从旧版公用文件夹中注销,并锁定这些文件夹直到迁移完成最终同步时为止。在此过程中,用户无法访问公用文件夹。此外,发送到启用邮件的公用文件夹的任何邮件都会排队,并且在公用文件夹迁移完成前不会进行传递。
在旧版 Exchange 服务器中,运行以下命令锁定旧版公用文件夹,以便完成迁移。
Set-OrganizationConfig -PublicFoldersLockedForMigration:$true
如果组织具有多个公用文件夹数据库,则需要等到公用文件夹复制完成,才能确保所有公用文件夹数据库都选取了 PublicFoldersLockedForMigration 标志,且用户最近对文件夹进行的任何挂起更改都已在整个组织中进行了融合。这可能需要几个小时。
在旧版 Exchange 服务器中,运行以下命令,以指示公用文件夹迁移已完成:
Set-OrganizationConfig -PublicFolderMigrationComplete:$true
当锁定后,本地的公共文件夹就无法被访问:
第 7 步:完成公用文件夹迁移(需要停机时间)
若要完成公用文件夹迁移,请运行以下命令:
Complete-MigrationBatch PublicFolderMigration
本地的Public Folder刚刚被锁定,可能需要时间同步。在重启本地Exchange Information Store后,再次运行命令。
当您完成迁移时,Exchange 将在旧版 Exchange 服务器与 Exchange 2013 之间执行最终同步。如果最终同步成功,将解除锁定 Exchange 2013 上的公用文件夹,迁移批处理状态将更改为”已完成”。
第8部:测试和解锁公用文件夹迁移
完成公用文件夹迁移之后,您应该运行以下测试,确保迁移成功。这样便能够在切换使用 Office 365 或 Exchange Online 公用文件夹之前测试迁移的公用文件夹层次结构。
1.在 Office 365 或 Exchange Online PowerShell 中,指定一些测试邮箱将任何新迁移的公用文件夹邮箱用作默认公用文件夹邮箱。
Set-Mailbox -Identity <Test User> -DefaultPublicFolderMailbox <Public Folder Mailbox Identity>
2.使用之前步骤中确定的测试用户登录 Outlook 2007 或更新版本,然后执行以下公用文件夹测试:
◦查看层次结构。
◦检查权限。
◦创建和删除公用文件夹。
◦在公用文件夹中发布内容以及从中删除内容。
3.如果在验证时,有遇到任何问题,我们可能需要做回滚迁移。如果公用文件夹的内容和层次结构可接受并按预期方式工作,运行以下 Exchange Online PowerShell 命令,为所有其他用户解锁公用文件夹。
Get-Mailbox -PublicFolder | Set-Mailbox -PublicFolder -IsExcludedFromServingHierarchy $false
重要说明:
完成初始迁移验证后,请勿使用 IsExcludedFromServingHierarchy 参数,因为 Exchange Online 的自动存储管理服务使用此参数。
4.确认迁移完成后,在 Exchange Online PowerShell 中的命令行管理程序中运行以下命令,确保 Set-OrganizationConfig 上的 PublicFoldersEnabled 参数设置为 Local:
Set-OrganizationConfig -PublicFoldersEnabled Local
第三部分: 验证公用文件夹迁移是否成功
在步骤 2:准备迁移中,会指导您在迁移开始之前获取公用文件夹结构、统计信息和权限的快照。以下步骤将帮助您通过在迁移完成后获取这些相同的快照,验证公用文件夹迁移是否成功。然后,您可以比较这两个文件中的数据以验证是否成功。
1.在 Exchange Online PowerShell 中,运行以下命令以获取新文件夹结构的快照。
Get-PublicFolder -Recurse | Export-CliXML C:\PFMigration\Cloud_PFStructure.xml
2.在 Exchange Online PowerShell 中,运行以下命令以获取公用文件夹统计信息(如项目计数、大小和所有者)的快照。
Get-PublicFolderStatistics -ResultSize Unlimited | Export-CliXML C:\PFMigration\Cloud_PFStatistics.xml
3.在 Exchange Online PowerShell 中,运行以下命令以获取权限的快照。
Get-PublicFolder -Recurse | Get-PublicFolderClientPermission | Select-Object Identity,User -ExpandProperty AccessRights | Export-CliXML C:\PFMigration\Cloud_PFPerms.xml
Xixi Huang
微软合作伙伴技术顾问