使用批量迁移将 Exchange 2010 公用文件夹迁移到 Exchange 2016 或 Exchange 2019

将公用文件夹从 Exchange Server 2010 SP3 RU8 迁移到同一林中的 Exchange Server 2016 或 Exchange 2019。

我们将 Exchange 2010 SP3 RU8 或更高版本服务器称为旧版 Exchange 服务器

你将使用 *MigrationBatch cmdlet 和 *PublicFolderMigrationRequest cmdlet 执行迁移,以便进行故障排除。 此外,还将使用以下 PowerShell 脚本:

  • Export-PublicFolderStatistics.ps1:此脚本创建文件夹名称到文件夹大小的映射文件。

  • Export-PublicFolderStatistics.psd1:此支持文件由 Export-PublicFolderStatistics.ps1 脚本使用,应下载到同一位置。

  • PublicFolderToMailboxMapGenerator.ps1:此脚本创建公用文件夹到邮箱的映射文件。

  • PublicFolderToMailboxMapGenerator.strings.psd1:此支持文件由 PublicFolderToMailboxMapGenerator.ps1 脚本使用,应下载到同一位置。

  • Create-PublicFolderMailboxesForMigration.ps1:此脚本创建用于迁移的目标公用文件夹邮箱。 此外,此脚本依据 公用文件夹的限制中建议的每个公用文件夹邮箱上用户登录次数的准则,计算用于处理估计的用户负载所需要的邮箱数。

  • Create-PublicFolderMailboxesForMigration.strings.psd1:此支持文件由 Create-PublicFolderMailboxesForMigration.ps1 脚本使用,应下载到同一位置。

步骤 1:下载迁移脚本 部分提供了有关下载这些脚本的位置的详细信息。 请确保将所有脚本下载到同一位置。

有关公用文件夹相关的更多管理任务,请参阅公用文件夹程序

Exchange Server版本支持哪些迁移路径?

Exchange 支持从以下旧版 Exchange Server 移动公用文件夹:

  • Exchange 2010 SP3 RU8 或更高版本

开始前,有必要了解什么?

  • 在开始之前,我们建议您完整阅读本主题,因为有些步骤需要停机时间。

  • Exchange 2010 服务器需要运行 Exchange 2010 SP3 RU8 或更高版本。

  • 一次最多可以将 500,000 个公用文件夹迁移到 Exchange 2016。

  • 在 Exchange 2016 中,你必须是"组织管理"角色组的成员。 若要详细了解如何启用"组织管理"角色组,请参阅管理角色组

  • 在 Exchange 2010 中,必须是组织管理或服务器管理 RBAC 角色组的成员。 有关详细信息,请参阅向角色组添加成员

  • 开始迁移之前,您应考虑公用文件夹的限制

  • 在迁移之前,请将所有用户邮箱移动到 Exchange 2016,因为具有 Exchange 2010 邮箱的用户无权访问 Exchange 2016 上的公用文件夹。 有关详细信息,请参阅 Exchange Server 中的邮箱移动

  • 迁移完成后,如果你想要让外部发件人向迁移的已启用邮件功能的公用文件夹发送邮件,则至少需要向" 匿名"用户授予" 创建项目"权限。 如果不执行此操作,外部发件人将收到一封传递失败通知,邮件将不会传递到迁移的已启用邮件功能的公用文件夹。 要了解如何设置匿名用户的权限,请参阅对公用文件夹启用或禁用邮件

  • 必须使用单个迁移批处理来迁移所有公用文件夹数据。 Exchange 一次只允许创建一个迁移批处理。 如果尝试同时创建多个迁移批处理,则结果将是错误。

  • 若要了解本主题中的过程可能适用的键盘快捷键,请参阅 Exchange 管理中心内的键盘快捷键

重要

在开始迁移之前,请确保将仲裁邮箱迁移到目标 Exchange 服务器。 否则,迁移批处理将挂起,处于 “正在启动” 状态。 若要标识迁移仲裁邮箱,请运行以下 cmdlet:
Get-Mailbox -Arbitration -Identity Migration.*

步骤 1:下载迁移脚本

  1. Public Folders Migration Scripts(公用文件夹迁移脚本)下载所有的脚本和支持文件。

  2. 将脚本保存到将运行 PowerShell 的本地电脑。 例如,C:\PFScripts。 请确保所有的脚本都保存在相同的位置。

步骤 2:准备迁移

在开始迁移之前,执行以下先决条件步骤。

Exchange 2010 服务器上的先决条件步骤

  1. 为了在迁移结束时进行验证,建议首先在 Exchange 2010 服务器上运行以下命令,以创建当前公用文件夹部署的快照:

    • 运行以下命令,获取原始源文件夹结构的快照:

      Get-PublicFolder -Recurse | Export-CliXML C:\PFMigration\Legacy_PFStructure.xml
      
    • 运行以下命令,获取公用文件夹统计信息(如项目计数、大小和所有者)的快照:

      Get-PublicFolderStatistics | Export-CliXML C:\PFMigration\Legacy_PFStatistics.xml
      
    • 运行以下命令,获取权限的快照:

      Get-PublicFolder -Recurse | Get-PublicFolderClientPermission | Select-Object Identity,User -ExpandProperty AccessRights | Export-CliXML C:\PFMigration\Legacy_PFPerms.xml
      
  2. 如果公用文件夹的名称包含反斜杠 ( \ ) ,则迁移将在父公用文件夹中创建迁移的公用文件夹。 在迁移之前,我们建议您为名称中包含反斜线的公用文件夹重命名。

    若要在 Exchange 2010 中查找名称中有反斜杠的公用文件夹,请运行以下命令:

    Get-PublicFolderStatistics -ResultSize Unlimited | Where {($_.Name -like "*\*") -or ($_.Name -like "*/*") } | Format-List Name, Identity
    

    如果返回任何公用文件夹,您可以通过使用以下命令对它们进行重命名:

    Set-PublicFolder -Identity <public folder identity> -Name <new public folder name>
    
  3. 通过运行以下命令,确保没有以前成功迁移的记录:

    Get-OrganizationConfig | Format-List PublicFoldersLockedforMigration, PublicFolderMigrationComplete
    

    以前成功的迁移会将 PublicFoldersLockedforMigrationPublicFolderMigrationComplete 属性设置为 值 True,这将导致新的迁移请求失败。

    如果属性值为 True,请运行以下命令,将其更改为 False

    Set-OrganizationConfig -PublicFoldersLockedforMigration $false -PublicFolderMigrationComplete $false
    

    注意

    重置这些属性后,您必须等待 Exchange 检测到新设置。 此过程最多可能需要两个小时才能完成。

有关语法和参数的详细信息,请参阅下列主题:

必须先在 Exchange 2016 服务器上执行的步骤

  1. 请确保没有现有的公用文件夹迁移请求。 如果有,请清除它们,否则您自己的迁移请求将会失败。 并非所有情况都需要此步骤;只有在您认为管道中可能存在现有迁移请求时,才需要此步骤。

    重要

    在删除迁移请求之前,请务必了解现有公用文件夹的存在原因。 运行以下命令可以确定上一个请求的提出时间并诊断可能发生的任何问题。 您可能需要与组织中的其他管理员沟通,以确定更改原因。

    • 运行以下命令以发现任何现有的批量迁移请求:

      $batch = Get-MigrationBatch | ?{$_.MigrationType.ToString() -eq "PublicFolder"}
      
    • 运行以下命令以删除任何现有的公用文件夹批处理迁移请求。

      $batch | Remove-MigrationBatch -Confirm:$false
      
  2. 通过运行以下命令,确保 Exchange 2016 服务器上不存在公用文件夹或公用文件夹邮箱:

    Get-Mailbox -PublicFolder
    

    如果此命令没有返回任何公用文件夹邮箱,请继续执行第 3 步:生成 .csv 文件。 如果此命令返回了任何公用文件夹邮箱,请运行以下命令,检查是否有任何公用文件夹:

    Get-PublicFolder
    

    如果有任何公用文件夹,请运行以下命令将其删除。 请确保您已保存公用文件夹中的所有信息。

    注意

    删除后,公用文件夹中的所有信息都会永久删除。

    Get-Mailbox -PublicFolder | Where {$_.IsRootPublicFolderMailbox -eq $false} | Remove-Mailbox -PublicFolder -Force -Confirm:$false
    
    Get-Mailbox -PublicFolder | Remove-Mailbox -PublicFolder -Force -Confirm:$false
    

有关语法和参数的详细信息,请参阅下列主题:

步骤 3:生成 .csv 文件

  1. 在 Exchange 2010 服务器上,运行 Export-PublicFolderStatistics.ps1 脚本以创建文件夹名称到文件夹大小的映射文件。 This script needs to be run by a local administrator. The file will contain two columns: FolderName and FolderSize. The values for the FolderSize column will be displayed in bytes. For example, \PublicFolder01,10000.

    .\Export-PublicFolderStatistics.ps1 <Folder to size map path> <FQDN of source server>
    
    • FQDN of source server 等于托管公用文件夹层次结构的邮箱服务器的完全限定域名。

    • 要调整映射路径大小的文件夹 等于要在其中保存.csv文件的本地或网络共享文件夹上的文件名和路径。 在本主题的后面部分,将需要从 Exchange 2016 服务器访问此文件。 如果仅指定文件名,则会在本地计算机上的当前 PowerShell 目录中生成此文件。

    示例 1

    以下示例将公用文件夹统计信息导出到从中执行脚本的同一文件夹中名为 PFStats.csv 的文件:

    .\Export-PublicFolderStatistics.ps1 -ExportFile PFStats.csv -PublicFolderServer bat2exch1
    

    示例 2

    以下示例将公用文件夹统计信息导出到服务器 Exch2 上名为 Data 的网络共享文件夹中名为PFStats.csv的文件:

    .\Export-PublicFolderStatistics.ps1 -ExportFile \\Exch2\data\PFStats.csv -PublicFolderServer exch1
    
  2. PublicFolderToMailboxMapGenerator.ps1运行脚本以创建公用文件夹到邮箱的映射文件。 此文件用于计算 Exchange 2016 服务器上公用文件夹邮箱的正确数量。

    注意

    如果公用文件夹的名称包含反斜杠 ****,则会在父公用文件夹中创建公用文件夹。 We recommend that you review the .csv file and edit any names that contain a backslash.

    .\PublicFolderToMailboxMapGenerator.ps1 <Maximum mailbox size in bytes> <Folder to size map path> <Folder to mailbox map path>
    
    • Maximum mailbox size in bytes等于您要为新的公用文件夹邮箱设置的最大大小。 在指定此设置时,请确保允许进行扩展,以让公用文件夹具有增大空间。

    • 用于调整映射路径大小的文件夹 等于运行 Export-PublicFolderStatistics.ps1 脚本时创建的 .csv 文件的完整文件路径。

    • Folder to mailbox map path等于通过此步骤创建的文件夹到邮箱 .csv 文件的文件名和路径。 如果您仅指定文件名,则会在本地计算机上的当前 PowerShell 目录中生成此文件。

第 4 步:在 Exchange 2016 中创建公用文件夹邮箱

运行以下命令来创建目标公用文件夹邮箱。 该脚本将为之前在步骤 3 中通过运行 PublicFoldertoMailboxMapGenerator.ps1 脚本生成的 .csv 文件中的每个邮箱创建目标邮箱。

.\Create-PublicFolderMailboxesForMigration.ps1 -FolderMappingCsv Mapping.csv -EstimatedNumberOfConcurrentUsers:<estimate>

Mapping.csv 是由步骤 3 中的脚本生成的 PublicFoldertoMailboxMapGenerator.ps1 文件。 同时浏览某个公用文件夹层次结构的用户连接估计数量通常少于组织中的用户总数。

步骤 5:启动迁移请求

在 Exchange 命令行管理程序中创建批量迁移请求后,可以在 Exchange 管理中心 (EAC) 查看和管理请求。

  1. 在 Exchange 2016 服务器上,运行以下命令:

    New-MigrationBatch -Name PFMigration -SourcePublicFolderDatabase (Get-PublicFolderDatabase -Server <Source server name>) -CSVData ([System.IO.File]::ReadAllBytes('<Folder to mailbox map path>')) -NotificationEmails <email addresses for migration notifications>
    

    参数 NotificationEmails 是可选的。

  2. 在 EAC 或 Exchange 命令行管理程序中开始迁移。

    • 在 Exchange 命令行管理程序中,运行以下命令:

      Start-MigrationBatch PFMigration
      
    • 在 EAC 中:

      1. 登录 Exchange Online 并打开 EAC。

      2. 转到>收件人迁移”。

      3. 选择您刚刚创建的迁移批处理,然后单击启动按钮。

      在 EAC 中, “状态” 列将显示初始批状态为 “已创建”。 The status changes to Syncing during migration. When the migration request is complete, the status will be Synced. You can double-click a batch to view the status of individual mailboxes within the batch. Mailbox jobs begin with a status of Queued. 作业开始时状态为 “正在同步”,完成后 InitialSync ,状态将显示“ 已同步”。

可以在 EAC 的“ 收件人>迁移 ”选项卡中查看和管理迁移进度和完成情况。

由于 New-MigrationBatch cmdlet 会为每个公用文件夹邮箱发起邮箱迁移请求,因此可以使用 EAC 中的邮箱迁移页查看这些请求的状态,并且可以创建可通过电子邮件发送给你的迁移报告。

  1. 登录 Exchange Online 并打开 EAC。

  2. 转到>收件人迁移”。

  3. 选择刚刚创建的迁移请求,然后在 “详细信息 ”窗格中单击“查看 详细信息 ”。

有关语法和参数的详细信息,请参阅下列主题:

步骤 6:锁定 Exchange 2010 服务器上的公用文件夹,以便最终迁移 (需要停机)

直到此刻之前,用户都能够在迁移过程中访问公用文件夹。 后续步骤将从 Exchange 2010 公用文件夹中注销用户,并在迁移完成最终同步时锁定文件夹。 用户将无法在此过程中访问公用文件夹。 而且,任何发送到已启用邮件的公用文件夹的邮件都会排队,且在公用文件夹迁移完成前不会传递。

在按如下所述运行 PublicFoldersLockedForMigration 命令之前,请确保所有作业都处于 “已同步” 状态。 可以通过运行 Get-PublicFolderMailboxMigrationRequest 命令来执行此操作。 只有在验证所有作业都处于 “已同步” 状态后,才继续执行此步骤。

在 Exchange 2010 服务器上,运行以下命令以锁定公用文件夹以供最终完成。

Set-OrganizationConfig -PublicFoldersLockedForMigration:$true

有关语法和参数的详细信息,请参阅 Set-OrganizationConfig

如果组织有多个公用文件夹数据库,则需要等待公用文件夹复制完成,以确认所有公用文件夹数据库都已选取 PublicFoldersLockedForMigration 属性值,并且用户最近对文件夹所做的任何挂起的更改已在组织中聚合。 这可能需要几个小时。

步骤 7:完成公用文件夹迁移(需要停机时间)

首先,运行以下 cmdlet 以将 Exchange 2016 部署类型更改为" 远程":

Set-OrganizationConfig -PublicFoldersEnabled Remote

完成此操作后,您可以通过运行下面的命令来完成公用文件夹迁移:

Complete-MigrationBatch PFMigration

或者,您可以单击 EAC 中的“完成此迁移批处理”,以此来完成迁移。

完成迁移后,Exchange 会在 Exchange 2010 服务器与 Exchange 2016 之间执行最终同步。 如果最终同步成功,则会解锁 Exchange 2016 服务器上的公用文件夹,并且迁移批处理的状态会先后变为“正在完成”和“已完成”。 迁移批处理通常需要几个小时才能将其状态从 “已同步” 更改为 “正在完成”,此时最终同步将开始。

注意

如果出于任何原因迁移批处理文件未完成 (则 PublicFolderMigrationComplete 属性值) False 在 Exchange 2010 服务器上重启信息存储 (IS) 。

步骤 8:测试和解锁公用文件夹迁移

完成公用文件夹迁移之后,应运行以下测试,以确保迁移成功。 这样,便能够在改为使用 Exchange 2016 公用文件夹之前测试迁移的公用文件夹层次结构。

  1. 在 PowerShell 中运行以下命令,指定一些测试邮箱将任一新迁移的公用文件夹邮箱用作默认公用文件夹邮箱。

    Set-Mailbox -Identity <Test User> -DefaultPublicFolderMailbox <Public Folder Mailbox Identity>
    
  2. 使用上一步中确定的测试用户登录 Outlook 2007 或更高版本,然后执行以下公用文件夹测试:

    • 查看层次结构。

    • 检查权限。

    • 创建和删除公用文件夹。

    • 在公用文件夹中发布内容以及从中删除内容。

  3. 如果您遇到任何问题,请参阅本主题后面的回滚迁移。 如果公用文件夹的内容和层次结构可接受并按预期方式工作,运行以下命令,为所有其他用户解锁公用文件夹。

    Get-Mailbox -PublicFolder | Set-Mailbox -PublicFolder -IsExcludedFromServingHierarchy $false
    

    重要

    初始迁移验证完成后,请勿使用 IsExcludedFromServingHierarchy 参数,因为此参数由 Exchange 的自动负载均衡服务使用。

  4. 在 Exchange 2010 服务器上,运行以下命令以指示公用文件夹迁移已完成:

    Set-OrganizationConfig -PublicFolderMigrationComplete:$true
    
  5. 确认迁移完成后,请在 Exchange 2016 服务器上运行以下命令:

    Set-OrganizationConfig -PublicFoldersEnabled Local
    
  6. 最后,如果你想要让外部发件人向迁移的已启用邮件功能的公用文件夹发送邮件,则至少需要向" 匿名"用户授予" 创建项目"权限。 如果不执行此操作,外部发件人将收到一封传递失败通知,邮件将不会传递到迁移的已启用邮件功能的公用文件夹。

    可以使用 Exchange 命令行管理程序或 Outlook 设置匿名用户的权限。 要了解如何设置匿名用户的权限,请参阅对公用文件夹启用或禁用邮件

我如何知道这有效?

Step 2: Prepare for the migration中,会指导您在迁移开始之前获取公用文件夹结构、统计信息和权限的快照。 以下步骤将帮助您通过在迁移完成后获取这些相同的快照,验证公用文件夹迁移是否成功。 然后,您可以通过比较这两个文件中的数据来验证迁移是否成功。

  1. 运行以下命令,获取新文件夹结构的快照。

    Get-PublicFolder -Recurse | Export-CliXML C:\PFMigration\Cloud_PFStructure.xml
    
  2. 运行以下命令,获取公用文件夹统计信息(如项目计数、大小和所有者)的快照:

    Get-PublicFolderStatistics -ResultSize Unlimited | Export-CliXML C:\PFMigration\Cloud_PFStatistics.xml
    
  3. 运行以下命令,获取权限的快照。

    Get-PublicFolder -Recurse | Get-PublicFolderClientPermission | Select-Object Identity,User -ExpandProperty AccessRights | Export-CliXML  C:\PFMigration\Cloud_PFPerms.xml
    

从 Exchange 2010 服务器中删除公用文件夹数据库

迁移完成后,并且已验证 Exchange 2016 或 Exchange 2019 公用文件夹是否按预期工作,应删除 Exchange 2010 服务器上的公用文件夹数据库。

若要详细了解如何从 Exchange 2010 服务器中删除公用文件夹数据库,请参阅删除公用文件夹数据库

回滚迁移

如果迁移遇到问题,需要重新激活 Exchange 2010 公用文件夹,请执行以下步骤。

谨慎

如果将迁移回滚到 Exchange 2010 服务器,则会丢失发送到已启用邮件的公用文件夹的任何电子邮件,或者在迁移后发布到 Exchange 2016 或 Exchange 2019 中的公用文件夹的内容。 若要保存此内容,需要将公用文件夹内容导出到 .pst 文件,然后在回滚完成后将其导入 Exchange 2010 公用文件夹。

  1. 在 Exchange 2010 服务器上,运行以下命令以解锁已迁移的公用文件夹。 此进程可能需要几个小时才会完成。

    Set-OrganizationConfig -PublicFoldersLockedForMigration $false
    
  2. 在 Exchange 2016 服务器中,运行以下命令,删除公用文件夹邮箱。

    Get-Mailbox -PublicFolder | Where {$_.IsRootPublicFolderMailbox -eq $false} | Remove-Mailbox -PublicFolder -Force -Permanent $true -Confirm:$false
    
    Get-Mailbox -PublicFolder | Remove-Mailbox -PublicFolder -Force -Permanent $true -Confirm:$false
    
  3. 在 Exchange 2010 服务器上运行以下命令,将 PublicFolderMigrationComplete 属性值设置为 False

    Set-OrganizationConfig -PublicFolderMigrationComplete $false
    
  4. 在 Exchange 2016 服务器上,运行以下命令以删除公用文件夹邮箱。

    Set-OrganizationConfig -PublicFoldersEnabled Remote -RemotePublicFolderMailboxes <ProxyMailbox1>,<ProxyMailbox2>,...,<ProxyMailboxN>
    

    有关必须与此命令一起使用的远程公用文件夹邮箱的详细信息,请参阅 配置用户邮箱位于 Exchange 2013 服务器上的旧公用文件夹