使用批处理迁移将公用文件夹从旧版本迁移到 Exchange 2013

总结: 本文介绍如何将公用文件夹从 Exchange 2007 或 Exchange 2010 移动到 Exchange 2013。

本文介绍如何将公用文件夹从 Exchange Server 2010 SP3 RU8 或 Exchange 2007 SP3 RU15 迁移到同一林中的 Microsoft Exchange Server 2013 CU7 或更高版本。

我们将 Exchange 2010 SP3 RU8 和 Exchange 2007 SP3 RU15 服务器称为 旧 Exchange 服务器

注意

本文中所述的批量迁移方法是将旧式公用文件夹迁移到 Exchange 2013 时唯一受支持的方法。 用于迁移公用文件夹的串行迁移旧方法即将被弃用,且不再受 Microsoft 支持。

你将使用 *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 脚本使用,应下载到同一位置。

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

将公用文件夹迁移到 Exchange 2013 的操作支持哪些 Exchange 版本?

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

  • Exchange 2010 SP3 RU8 或更高版本
  • Exchange 2007 SP3 RU15 或更高版本

如果需要将公用文件夹移动到 Exchange 2013,但本地服务器未运行 Exchange 2010 或 Exchange 2007 的最低支持版本,检查“使用串行迁移将公用文件夹从以前的版本迁移到 Exchange 2013”。 虽然可以视需要使用串行迁移,但我们强烈建议升级本地服务器,并使用批处理迁移。 批量迁移可实现明显更快、更高的可靠性。

您不能将公用文件夹直接从 Exchange 2003 迁移出来。 如果在组织中运行 Exchange 2003,则需要将所有公用文件夹数据库和副本移动到 Exchange 2010 SP3 RU8 或更高版本,或者移动到 Exchange 2007 SP3 RU15 或更高版本。 没有公用文件夹副本可以在 Exchange 2003 上保留。 此外,发往 Exchange 2013 公用文件夹的邮件不能通过 Exchange 2003 服务器进行路由。

在开始之前,您需要知道什么?

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

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

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

  • 单个迁移中可迁移到 Exchange 2013 的公用文件夹的最大数目为 500,000。

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

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

  • 在 Exchange 2007 中,必须分配有 Exchange 组织管理员角色或 Exchange Server 管理员角色。 此外,还必须分配有公用文件夹管理员角色和目标服务器的本地管理员组。 有关详细信息,请参阅如何向管理员角色添加用户或组

  • 在 Exchange 2007 服务器上,如有必要,请升级到 Windows Server 2008 x64 Edition (KB968930) Windows PowerShell 2.0 和 WinRM 2.0

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

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

  • 在多域环境中,如果 Exchange 在子域中运行,则迁移到 Exchange 2013 后,已启用邮件的公用文件夹将停止工作。 这是因为在 Exchange 2013 中,已启用邮件的公用文件夹对象必须位于根域下。 若要解决此问题,需要禁用已启用邮件的公用文件夹,然后再次启用邮件,以便将它们移动到正确的域位置。

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

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

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

重要

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

步骤 1:下载迁移脚本

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

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

步骤 2:准备迁移

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

适用于旧版 Exchange 服务器的先决条件步骤

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

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

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

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

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

    保存上述命令所生成的信息,以供在完成迁移后进行比较。

  2. 如果公用文件夹的名称包含反斜杠 \,则会在迁移时在父公用文件夹中创建公用文件夹。 在迁移之前,我们建议您为名称中包含反斜线的公用文件夹重命名。

    1. 在 Exchange 2010 中,若要找到名称中包含反斜杠的公用文件夹,请运行以下命令:

      Get-PublicFolderStatistics -ResultSize Unlimited | Where {($_.Name -like "*\*") -or ($_.Name -like "*/*") } | Format-List Name, Identity
      
    2. 在 Exchange 2007 中,若要找到名称中包含反斜杠的公用文件夹,请运行以下命令:

      Get-PublicFolderDatabase | ForEach {Get-PublicFolderStatistics -Server $_.Server | Where {$_.Name -like "*\*"}}
      
    3. 如果返回任何公用文件夹,您可以通过使用以下命令对它们进行重命名:

      Set-PublicFolder -Identity <public folder identity> -Name <new public folder name>
      
  3. 请确保之前没有成功迁移的记录。

    1. 下面的示例展示了如何检查公用文件夹的迁移状态。

      Get-OrganizationConfig | Format-List PublicFoldersLockedforMigration, PublicFolderMigrationComplete
      

      如果以前迁移成功, 则 PublicFoldersLockedforMigrationPublicFolderMigrationComplete 属性的值为 $true。 使用步骤 3b 中的 命令将值设置为 $false。 如果该值设置为 $true,则迁移请求将失败。

    2. 如果 PublicFoldersLockedforMigrationPublicFolderMigrationComplete 属性的状态为 $true,请运行以下命令,将值设置为 $false

      Set-OrganizationConfig -PublicFoldersLockedforMigration:$false -PublicFolderMigrationComplete:$false
      

    警告

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

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

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

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

    现有的迁移请求可以是下列两种类型之一:批处理迁移或串行迁移。 用于检测每种类型请求和删除每种类型请求的命令如下所示。

    重要

    • 在删除迁移请求之前,请务必了解现有公用文件夹的存在原因。 运行以下命令可以确定上一个请求的提出时间并诊断可能发生的任何问题。 您可能需要与组织中的其他管理员沟通,以确定更改原因。
    • ) Exchange 2013 累积更新 8 (CU8) 中终止了对公用文件夹 (* -PublicFolderMigrationRequest* cmdlet 的串行迁移的支持。

    下面的示例会发现任何现有的串行迁移请求。

    Get-PublicFolderMigrationRequest | Get-PublicFolderMigrationRequestStatistics -IncludeReport | Format-List
    

    下面的示例展示了如何删除任何现有的公用文件夹串行迁移请求。

    Get-PublicFolderMigrationRequest | Remove-PublicFolderMigrationRequest
    

    下面的示例会发现任何现有的批处理迁移请求。

    $batch = Get-MigrationBatch | ?{$_.MigrationType.ToString() -eq "PublicFolder"}
    

    下面的示例展示了如何删除任何现有的公用文件夹批处理迁移请求。

    $batch | Remove-MigrationBatch -Confirm:$false
    
  2. 确保 Exchange 2013 服务器上不存在公用文件夹或公用文件夹邮箱。

    1. 运行以下命令,检查是否有任何公用文件夹邮箱。

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

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

      注意

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

      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 服务器上,运行 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 等于托管公用文件夹层次结构的邮箱服务器的完全限定域名。

    • Folder to size map path 等于要用于保存 .csv 文件的网络共享文件夹上的文件名称和路径。 在本主题的后面部分,你将需要从 Exchange 2013 服务器访问此文件。 如果您仅指定文件名,则会在本地计算机上的当前 PowerShell 目录中生成此文件。

  2. PublicFolderToMailboxMapGenerator.ps1运行脚本以创建公用文件夹到邮箱的映射文件。 此文件用于计算 Exchange 2013 邮箱服务器上公用文件夹邮箱的正确数量。

    注意

    如果公用文件夹的名称包含反斜杠 \,则会在父公用文件夹中创建公用文件夹。 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等于您要为新的公用文件夹邮箱设置的最大大小。 在指定此设置时,请确保允许进行扩展,以让公用文件夹具有增大空间。

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

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

步骤 4:在 Exchange 2013 中创建公用文件夹邮箱

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

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

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

步骤 5:启动迁移请求

迁移 Exchange 2007 公用文件夹的步骤与迁移 Exchange 2010 公用文件夹的步骤不同。

提示

无论是从 Exchange 2007 还是 Exchange 2010 迁移,使用适当的 cmdlet 创建批量迁移请求后,即可在 EAC 中查看和管理请求。

迁移 Exchange 2007 公用文件夹

  1. Exchange 2013 无法识别旧系统公用文件夹(如 OWAScratchPad 和 Exchange 2007 中的架构根文件夹子树),因此将被视为“坏”项目。 这会导致迁移失败。 作为迁移请求的一部分,必须为 参数指定值 BadItemLimit 。 此值根据您拥有的公用文件夹数据库数量而有所不同。 以下命令将确定你拥有的公用文件夹数据库数,并计算 BadItemLimit 迁移请求的 。

    $PublicFolderDatabasesInOrg = @(Get-PublicFolderDatabase)
    
    $BadItemLimitCount = 5 + ($PublicFolderDatabasesInOrg.Count -1)
    
  2. 在 Exchange 2013 服务器上运行以下命令:

    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> -BadItemLimit $BadItemLimitCount
    
  3. 使用以下命令启动迁移:

    Start-MigrationBatch PFMigration
    

迁移 Exchange 2010 公用文件夹

  1. 在 Exchange 2013 服务器上,运行以下命令。

    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. 使用以下命令启动迁移:

    Start-MigrationBatch PFMigration
    

    或:

    您可以在 EAC 中启动迁移。

    1. 登录 Exchange Online 并打开 EAC。
    2. 导航到 “收件人>迁移”。
    3. 选择您刚刚创建的迁移批处理,然后单击启动按钮。

The Status column will show the initial batch status as Created. 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 可启动每个公用文件夹邮箱的邮箱迁移请求,所以您可以使用邮箱迁移页查看这些请求的状态。 您可以转到邮箱迁移页,并通过执行以下操作,生成可以电子邮件方式发送给您的迁移报告:

  1. 登录 Exchange Online 并打开 EAC。

  2. 导航到 “邮箱>迁移”。

  3. Select the migration request that was just created and then click View Details in the Details pane.

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

步骤 6:锁定旧版 Exchange 服务器上的公用文件夹以进行最终迁移(需要停机时间)

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

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

在旧版 Exchange 服务器中,运行以下命令锁定旧版公用文件夹,以便完成迁移。

Set-OrganizationConfig -PublicFoldersLockedForMigration:$true

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

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

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

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

Set-OrganizationConfig -PublicFoldersEnabled Remote

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

Complete-MigrationBatch PFMigration

Or, in EAC, you can complete the migration by clicking Complete this migration batch.

注意

如果出于任何原因迁移批处理文件未完成 (PublicFolderMigrationComplete 显示 False) ,请在旧服务器上重启信息存储 (IS) 。

When you complete the migration, Exchange will perform a final synchronization between the legacy Exchange server and Exchange 2013. 如果最终同步成功,Exchange 2013 服务器上的公用文件夹将解锁,迁移批处理的状态将更改为 “正在完成”,然后更改为“ 已完成”。 迁移批处理通常需要几个小时才能将其状态从 “已同步” 更改为 “正在完成”,此时最终同步将开始。

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

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

  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 Online。

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

    Set-OrganizationConfig -PublicFolderMigrationComplete:$true
    
  5. 验证迁移已完成后,运行以下命令:

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

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

我如何知道这有效?

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

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

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

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

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

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

在迁移完成且您已验证 Exchange 2013 公用文件夹可按预期运行后,您应该删除旧版 Exchange 服务器中的公用文件夹数据库。

回滚迁移

如果您在迁移过程中遇到问题,并且需要重新激活旧版 Exchange 公用文件夹,请按照下列步骤操作。

警告

如果将迁移回滚到旧版 Exchange 服务器,则会丢失任何发送到已启用邮件的公用文件夹的电子邮件或在迁移后发布到 Exchange 2013 中公用文件夹的内容。 为了保存此内容,必须将公用文件夹内容导出到 .pst 文件中,然后在回滚完成后再将它导入旧版公用文件夹中。

  1. 在旧版 Exchange 服务器中,运行以下命令解锁旧版 Exchange 公用文件夹。 此进程可能需要几个小时。

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

    Get-Mailbox -PublicFolder | Where{$_.IsRootPublicFolderMailbox -eq $false} | Remove-Mailbox -PublicFolder -Force -Confirm:$false
    
    Get-Mailbox -PublicFolder | Remove-Mailbox -PublicFolder -Force -Confirm:$false
    
  3. 在旧版 Exchange 服务器上,运行以下命令,将 PublicFolderMigrationComplete 标志设置为 $false

    Set-OrganizationConfig -PublicFolderMigrationComplete:$False