使用批次迁移将 Exchange 服务器公用文件夹迁移到 Exchange Online

适用于:Exchange Server 2013Exchange Server 20162019 Exchange Server

将Exchange Server公用文件夹迁移到 Exchange Online 需要在本地环境中运行 Exchange Server 2013 CU15 或更高版本,或者 Exchange Server 2016 CU4 或更高版本。 所有版本的 Exchange Server 2019 都支持公用文件夹的批量迁移。

如果组织中具有 Exchange 2013 和 Exchange 2016/2019 公用文件夹的混合环境,并且想要将它们全部移动到Exchange Online,则本文中的说明将适合你,前提是 Exchange 2013 服务器安装了 CU15 或更高版本。

有关将 Exchange Server 2010 公用文件夹迁移到Exchange Online的说明,请参阅使用批量迁移将旧版公用文件夹迁移到Exchange Online

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

  • 强烈建议在尝试迁移之前查看 常见问题解答:公用文件夹

  • 升级到 Exchange Server 2013 CU15 或更高版本,或者升级到 Exchange Server 2016 CU4 或更高版本时,还必须准备 Active Directory,否则公用文件夹迁移将失败。 此 Active Directory 准备可确保所有相关 PowerShell cmdlet 和参数都可用于准备和运行迁移。 有关详细信息,请参阅准备 Active Directory 和域

  • 在 Exchange Online 中,你必须是"组织管理"角色组的成员。 此角色组不同于订阅 Microsoft 365、Office 365 或 Exchange Online 时分配给你的权限。 若要详细了解如何启用"组织管理"角色组,请参阅管理角色组

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

  • 在开始执行公用文件夹迁移之前,如果组织中任何单个公用文件夹的大小超过 25 GB,建议你从该文件夹中删除内容以减小其大小,或者将公用文件夹的内容分为多个较小的公用文件夹。 请注意,此处提到的 25 GB 限制只适用于公用文件夹,而不适用于相关文件夹可能带有的任何子级文件夹或子文件夹。 如果这两种方法都不可行,建议你不要将公用文件夹移动到 Exchange Online。 有关详细信息,请参阅 Exchange Online 限制

    注意

    如果Exchange Online中的当前公用文件夹配额小于 25 GB,则可以使用 Set-OrganizationConfig cmdlet 通过 DefaultPublicFolderIssueWarningQuota 和 DefaultPublicFolderProhibitPostQuota 参数来增加这些配额。

  • 在 Microsoft 365、Office 365 和 Exchange Online 中,最多可以创建 1000 个公用文件夹邮箱。 但是,从Exchange Server迁移最多支持 100 个公用文件夹邮箱。

  • 如果打算将用户迁移到 Microsoft 365 或 Office 365,则应在迁移公用文件夹之前完成用户迁移。 有关详细信息,请参阅将多个电子邮件帐户迁移到 Microsoft 365 或 Office 365的方法

  • 需要至少在一个同时托管公用文件夹邮箱的 Exchange 服务器上启用 MRS 代理。 有关详细信息,请参阅启用远程移动的女士代理终结点

  • 若要执行本文中的迁移过程,不能使用 Exchange 管理中心 (EAC) 。 相反,你需要在 Exchange 服务器上使用 Exchange 命令行管理程序。 在 Exchange Online 中,需要使用 Exchange Online PowerShell。 有关详细信息,请参阅使用远程 PowerShell 连接到 Exchange Online

  • 若要运行本文中的迁移脚本,必须使用启用了基本身份验证的帐户。 目前不支持使用多重身份验证 (MFA) 的帐户。

  • 支持跳过从Exchange Server到Exchange Online的已删除项和已删除文件夹的迁移。 有关详细信息,请参阅 Exchange Team 博客文章,该博客文章介绍了 不使用转储器数据的新式公用文件夹迁移

  • 必须使用单个迁移批处理来迁移所有公用文件夹数据。 Exchange 仅允许为公用文件夹迁移创建一个迁移批处理。 如果尝试同时创建多个公用文件夹迁移批处理,则结果将是错误。 另请注意,一旦迁移批处理的状态为“已完成”,就不能从源环境复制更多数据。

  • 建议不要使用 Outlook 的 PST 导出功能将公用文件夹迁移到 Microsoft 365、Office 365或Exchange Online。 Exchange Online中的公用文件夹邮箱增长使用自动拆分功能进行管理,该功能在超过大小配额时拆分公用文件夹邮箱。 使用 PST 导出迁移公用文件夹时,自动拆分无法处理公用文件夹邮箱的突然增长,并且可能需要等待长达两周才能自动拆分才能从主邮箱移动数据。 建议改用本文中基于 cmdlet 的说明来迁移公用文件夹。 如果仍决定使用 PST 导出迁移公用文件夹,请参阅本文后面的使用 Outlook PST 导出将公用文件夹迁移到Office 365

  • 请验证是否在组织级别配置了 DefaultPublicFolderAgeLimit (Get-OrganizationConfig | Format-List DefaultPublicFolderAgeLimit) ,或者是否具有为单个公用文件夹配置的任何 AgeLimit (Get-PublicFolder <FolderPath> | Format-List AgeLimit) ,以便防止自动删除内容。

  • 在开始之前,请通读本文。 某些步骤需要故障时间。 故障时间期间,任何人都无法访问公用文件夹。 另请查看 已知问题列表。 此外,请阅读 公用文件夹迁移的最佳做法 ,以规划迁移。

提示

是否有任何疑问? 在 Exchange 论坛中寻求帮助。 请访问以下论坛:Exchange ServerExchange Online

步骤 1:下载迁移脚本

  1. 将所有脚本和支持文件从 Exchange 2013/2016/2019 公用文件夹迁移脚本Exchange 2010/2013/2016/EXO 公用文件夹下载到 Microsoft 365 或Office 365预迁移脚本

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

    你正在下载的脚本和文件是:

    • SourceSideValidations.ps1:源端验证脚本扫描源中的公用文件夹,并报告发现的问题以及解决问题所需的操作。 你将在本地 Exchange 服务器上运行此脚本。

    • Sync-ModernMailPublicFolders.ps1此脚本在 Exchange 本地环境与 Microsoft 365 或 Office 365 之间同步已启用邮件的公用文件夹对象。 你将在本地 Exchange 服务器上运行此脚本。

    • SyncModernMailPublicFolders.strings.psd1 Sync-ModernMailPublicFolders.ps1 脚本使用此支持文件,应将此文件下载到同一位置。

    • Export-ModernPublicFolderStatistics.ps1 此脚本可创建文件夹名称到文件夹大小和已删除项大小的映射文件。 你将在本地 Exchange 服务器上运行此脚本。

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

    • ModernPublicFolderToMailboxMapGenerator.ps1 此脚本使用 Export-ModernPublicFolderStatistics.ps1 脚本的输出创建公用文件夹到邮箱的映射文件。 你将在本地 Exchange 服务器上运行此脚本。

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

    • SetMailPublicFolderExternalAddress.ps1此脚本将ExternalEmailAddress本地环境中已启用邮件的公用文件夹更新为其Exchange Online对应文件夹,以便迁移后发送到已启用邮件的公用文件夹的电子邮件正确路由到Exchange Online。 需要在本地 Exchange 服务器上运行此脚本。

    • SetMailPublicFolderExternalAddress.strings.psd1 此支持文件供 Create-PublicFolderMailboxesForMigration.ps1 脚本使用,应下载到相同的位置。

步骤 2:准备迁移

注意

强烈建议从本地 Exchange 邮箱服务器运行 源端验证 脚本。 该脚本将扫描并报告已知导致迁移速度缓慢的问题,以及解决这些问题的指南。 该脚本将执行以下所有先决条件。

在开始迁移公用文件夹之前,请执行以下各节中的所有先决条件步骤。

一般先决条件步骤

要成功迁移,应执行以下操作:

  • 请确保 Active Directory 中没有孤立的公用文件夹邮件对象。 Active Directory 中的这些对象没有对应的 Exchange 对象。

  • 确认为 Active Directory 中的公用文件夹配置的 SMTP 电子邮件地址与 Exchange 对象上的 SMTP 电子邮件地址匹配。

  • 请确认 Active Directory 中没有重复的公用文件夹对象。 对于避免两个或多个 Active Directory 对象指向相同的启用邮件的公用文件夹而言,这是必要的。

本地 Exchange 2013、Exchange 2016 或 Exchange 2019 服务器环境中的先决条件步骤

在 Exchange 命令行管理程序(本地)中执行以下步骤:

  1. 迁移完成后,需要一些时间使 DNS 缓存通过 Internet 将邮件发送到 Exchange Online 新位置中已启用邮件的公用文件夹。 可以确保新迁移的已启用邮件的公用文件夹在此 DNS 转换期间通过创建具备已知名称的接受域来接收邮件。 为此,请在 Exchange 内部环境中运行以下命令。 在此示例中, target domain 是混合配置向导已为其配置发送连接器的 Microsoft 365、Office 365 或 Exchange Online 域。

    New-AcceptedDomain -Name PublicFolderDestination_78c0b207_5ad2_4fee_8cb9_f373175b3f99 -DomainName <target domain> -DomainType InternalRelay
    

    示例

    New-AcceptedDomain -Name PublicFolderDestination_78c0b207_5ad2_4fee_8cb9_f373175b3f99 -DomainName "contoso.mail.onmicrosoft.com" -DomainType InternalRelay
    

    如果接受的域已存在于本地环境中,请将其重命名为 PublicFolderDestination_78c0b207_5ad2_4fee_8cb9_f373175b3f99 ,并使其他属性保持不变。

    若要检查接受的域是否已存在于本地环境中,请运行以下命令:

    Get-AcceptedDomain | Where {$_.DomainName -eq "<target domain>"}
    

    若要将接受的域重命名为 PublicFolderDestination_78c0b207_5ad2_4fee_8cb9_f373175b3f99,请运行以下命令:

    Get-AcceptedDomain | Where {$_.DomainName -eq "<target domain>"} | Set-AcceptedDomain -Name PublicFolderDestination_78c0b207_5ad2_4fee_8cb9_f373175b3f99
    

    注意

    如果你希望 Exchange Online 中已启用邮件的公用文件夹接收来自 Internet 的外部电子邮件,必须禁用 Exchange Online 和 Exchange Online Protection (EOP) 中的基于目录的边缘阻止 (DBEB)。 有关详细信息,请参阅Use Directory Based Edge Blocking to Reject Messages Sent to Invalid Recipients

  2. 如果公用文件夹的名称包含反斜杠 \ 或正斜杠 /,则可能无法在迁移过程中将其迁移到其指定邮箱。 在迁移之前,请重命名任何此类文件夹以删除这些字符。

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

    Get-PublicFolder -Recurse -ResultSize Unlimited | Where {$_.Name -like "*\*" -or $_.Name -like "*/*"} | Format-List Name, Identity, EntryId
    

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

    Set-PublicFolder -Identity "<public folder EntryId>" -Name "<new public folder name>"
    
  3. (仅当出于某种原因重新尝试以前的迁移时,才需要执行此步骤。如果不是这种情况,请跳到下一步。) 运行以下 cmdlet 以确认组织中没有以前成功迁移的记录。 如果有,则需要将该值设置为 $false

    在更改值之前,请确认可以放弃此前尝试的迁移,以便不会意外地执行第二次迁移。

    a. 运行以下命令,检查是否存在之前的任何迁移过程,以及这些迁移的状态:

    Get-OrganizationConfig | Format-List  PublicFolderMailboxesLockedForNewConnections, PublicFolderMailboxesMigrationComplete
    

    b. 如果返回上述任何值,并将 值设置为 $true$false 请运行:

    Set-OrganizationConfig -PublicFolderMailboxesLockedForNewConnections:$false -PublicFolderMailboxesMigrationComplete:$false
    
  4. 为了在迁移完成后验证迁移是否成功,我们建议在所有相应的 Exchange 2016 或 Exchange 2019 服务器上运行以下命令。 这将获取当前公用文件夹部署的快照,可在以后使用当前部署与新迁移的公用文件夹进行比较。

    注意

    由于 Exchange 组织的大小各异,它可能需要一些时间来运行这些命令。

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

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

      Get-PublicFolderStatistics -ResultSize Unlimited | Export-CliXML OnPrem_PFStatistics.xml
      
    • 运行以下命令获取公用文件夹权限的快照。

      Get-PublicFolder -Recurse -ResultSize Unlimited | Get-PublicFolderClientPermission | Select-Object Identity,User,AccessRights -ExpandProperty AccessRights | Export-CliXML OnPrem_PFPerms.xml
      
    • 运行以下命令获取已启用邮件的公用文件夹的快照。

      Get-MailPublicFolder -ResultSize Unlimited | Export-CliXML OnPrem_MEPF.xml
      
    • 将前面的命令生成的文件保存在安全位置,以便在迁移结束时进行比较。

  5. 如果使用 Microsoft Entra Connect (Microsoft Entra Connect) 将本地目录与Microsoft Entra ID 同步,则需执行以下操作 (如果不使用 Microsoft Entra Connect,则可以跳过此步骤) :

    1. 在本地计算机上,打开“Microsoft Entra Connect”,然后选择“配置”。

    2. 在“ 其他任务” 屏幕上,选择“ 自定义同步选项”,然后单击“ 下一步”。

    3. “连接到Microsoft Entra ID”屏幕上,输入相应的凭据,然后单击“下一步”。 连接后,请继续单击“ 下一步 ”,直到进入 “可选功能 ”屏幕。

    4. 确保未选择 Exchange 邮件公用文件夹 。 如果未选择它,可以继续学习下一部分,即Exchange Online中的先决条件步骤。 如果选中,请单击以清除“检查”框,然后单击“下一步”。

      注意

      如果在“可选功能”屏幕上没有看到 Exchange 邮件公用文件夹选项,则可以退出“Microsoft Entra连接”,然后转到下一部分“Exchange Online中的先决条件步骤”。

    5. 清除 “Exchange 邮件公用文件夹” 选择后,继续单击“ 下一步 ”,直到在 “准备配置 ”屏幕上,然后单击“ 配置”。

Exchange Online 中的先决条件步骤

在 Exchange Online PowerShell 中,执行以下步骤:

  1. 请确保没有现有的公用文件夹迁移请求。 如果有,请清除它们,否则你自己的迁移请求将会失败。 只有在你认为管道中可能存在现有迁移请求时(迁移失败或者想要中止迁移)才需要此步骤。

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

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

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

    Remove-MigrationBatch <name of migration batch> -Confirm:$false
    
  2. 确保 Exchange Online 中不存在任何公用文件夹或公用文件夹邮箱。 如果你在遵循以下步骤后在 Exchange Online 中发现了公用文件夹,请务必在开始删除任何公用文件夹和公用文件夹邮箱之前确定它们为什么存在以及组织中的哪个人启动了公用文件夹层次结构。

    a. 在 Exchange Online PowerShell 中,运行以下命令以查看是否存在任何公用文件夹邮箱:

    Get-Mailbox -PublicFolder
    

    b. 如果该命令没有返回任何公用文件夹邮箱,请继续进行步骤 3:生成 .csv 文件。 如果该命令返回了所有公用文件夹邮箱,则运行以下命令,看看是否存在任何公用文件夹:

    Get-PublicFolder -Recurse
    
  3. 如果你在 Microsoft 365 或 Office 365 或 Exchange Online 中具有任何公用文件夹,请在确认不需要) 后,运行以下 PowerShell 命令将其删除 (。 请在删除前确保你已保存这些公用文件夹中的任何信息,因为在你删除公用文件夹时,所有信息都将被永久删除。

    Get-MailPublicFolder -ResultSize Unlimited | where {$_.EntryId -ne $null}| Disable-MailPublicFolder -Confirm:$false
    Get-PublicFolder -GetChildren \ -ResultSize Unlimited | Remove-PublicFolder -Recurse -Confirm:$false
    
  4. 删除公用文件夹之后,运行以下命令删除所有公用文件夹邮箱:

    $hierarchyMailboxGuid = $(Get-OrganizationConfig).RootPublicFolderMailbox.HierarchyMailboxGuid
    Get-Mailbox -PublicFolder | Where-Object {$_.ExchangeGuid -ne $hierarchyMailboxGuid} | Remove-Mailbox -PublicFolder -Confirm:$false -Force
    Get-Mailbox -PublicFolder | Where-Object {$_.ExchangeGuid -eq $hierarchyMailboxGuid} | Remove-Mailbox -PublicFolder -Confirm:$false -Force
    Get-Mailbox -PublicFolder -SoftDeletedMailbox | % {Remove-Mailbox -PublicFolder $_.PrimarySmtpAddress -PermanentlyDelete:$true -force -Confirm:$false}  
    $soft=Get-Mailbox -PublicFolder -SoftDeletedMailbox; foreach ($mbx in $soft){if ($mbx.Name -like "*CNF:*" -or $mbx.identity -like "*CNF:*") {Remove-Mailbox -PublicFolder        $mbx.ExchangeGUID.GUID -RemoveCNFPublicFolderMailboxPermanently -Force -Confirm:$false}}
    

    以 5-10 分钟的间隔重复上述命令块几次,以确保已清除 SoftDeletedMailbox,并且没有留下 CNF 对象。

    注意

    上述命令块可能会返回错误,例如“无法执行操作,因为无法找到对象 <MailboxName> ”,由于 AD 复制延迟,可以放心地忽略该错误。

  5. 再次运行以下命令,确保没有留下 SoftDeleted 或 CNF 邮箱。

    Get-Mailbox -PublicFolder -SoftDeletedMailbox
    

    如果看到软删除邮箱的列表,请重复步骤 4 中的命令块,否则继续执行下一步

步骤 3:生成 .csv 文件

使用以前下载的脚本生成在迁移过程中使用的 .csv 文件。

  1. 从 Exchange 命令行管理程序 (本地) ,运行 Export-ModernPublicFolderStatistics.ps1 脚本以创建文件夹名称到文件夹大小映射文件。 必须具有本地管理员权限才能运行此脚本。 生成的文件包含三列: FolderNameFolderSize,和 DeletedItemSizeFolderSizeDeletedItemSize 列的值以字节为单位显示。 例如, \PublicFolder01,10240, 100 表示名为 PublicFolder01 的层次结构根目录中的公用文件夹大小为 10240 字节 (10 KB) ,其中包含 100 字节的可恢复项。

    .\Export-ModernPublicFolderStatistics.ps1 <Folder-to-size map path>
    

    示例

    .\Export-ModernPublicFolderStatistics.ps1 stats.csv
    
  2. ModernPublicFolderToMailboxMapGenerator.ps1运行脚本以创建 .csv 文件,该文件将源公用文件夹映射到Exchange Online目标中的公用文件夹邮箱。 此文件用于计算 Exchange Online 中公用文件夹邮箱的正确数量。

请注意,由 ModernPublicFolderToMailboxMapGenerator.ps1 生成的文件不会包含组织中每个公用文件夹的名称。 它包含对大型文件夹树的父文件夹,或对本身较大的文件夹名称的引用。 你可以考虑将此文件作为"异常"文件,用于确保某些文件夹树以及大型文件夹置于特定公用文件夹邮箱。 在此文件中看不到任何公用文件夹属正常现象。 此映射文件中列出的任何文件夹的子文件夹将被迁移到与其父文件夹相同的公用文件夹邮箱(除非在将其定向到其他公用文件夹邮箱的映射文件内的另一行上明确提及)

.\ModernPublicFolderToMailboxMapGenerator.ps1 <Maximum mailbox size in bytes><Maximum mailbox recoverable item size in bytes><Folder-to-size map path><Folder-to-mailbox map path>
  • Maximum mailbox size in bytes是你要迁移到 Exchange Online 中任何单个公用文件夹邮箱的最大数据量。 此字段的最大大小当前为 100 GB,但我们建议使用较小的大小(例如最大大小的 50%),以便将来增加。

  • Maximum mailbox recoverable items size in bytes是 Exchange Online 邮箱上的可恢复项配额。 Exchange Online 中公用文件夹邮箱的最大大小当前为 100 GB。 建议将 RecoverableItemsQuota 设置为 15 GB 或更少。

  • Folder-to-size map path 是运行脚本时创建的 .csv 文件的文件 Export-ModernPublicFolderStatistics.ps1 路径。

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

示例

.\ModernPublicFolderToMailboxMapGenerator.ps1 -MailboxSize 50GB -MailboxRecoverableItemSize 1GB -ImportFile .\stats.csv -ExportFile map.csv

注意

脚本生成的 map.csv 使用将在下一步 EXO 中创建的目标公用文件夹邮箱的通用名称, (例如 Mailbox1 和 Mailbox2) 。 我们建议你更改 map.csv 中的公用文件夹邮箱名称,以适应组织的命名策略。 此外,如果本地组织已有与通用名称匹配的邮箱,则应编辑 map.csv 并为Exchange Online中的目标公用文件夹邮箱提供唯一名称。 使用记事本或类似编辑器编辑 map.csv 中的 TargetMailbox 名称

注意

当Exchange Online中唯一公用文件夹邮箱超过 100 个时,不支持将公用文件夹迁移到 Exchange Online。 在迁移期间,最多可以启用 100 个公用文件夹邮箱。

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

接下来,在 Exchange Online PowerShell 中创建将包含已迁移公用文件夹的目标公用文件夹邮箱。

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

$mappings = Import-Csv <Folder-to-mailbox map path>
$primaryMailboxName = ($mappings | Where-Object FolderPath -eq "\" ).TargetMailbox;
New-Mailbox -HoldForMigration:$true -PublicFolder -IsExcludedFromServingHierarchy:$false $primaryMailboxName
($mappings | Where-Object TargetMailbox -ne $primaryMailboxName).TargetMailbox | Sort-Object -unique | ForEach-Object { New-Mailbox -PublicFolder -IsExcludedFromServingHierarchy:$false $_ }

Folder-to-mailbox map path是由步骤 3:生成 .csv 文件中的ModernPublicFoldertoMailboxMapGenerator.ps1脚本生成的 folder-to-mailbox.csv 文件的文件路径。

步骤 5:启动迁移请求

现在需要在Exchange Server本地环境和Exchange Online中运行许多命令。

  1. 在托管公用文件夹邮箱的任何 Exchange 2016 或 Exchange 2019 服务器中,执行以下脚本。 此脚本将启用了邮件的公用文件夹从本地 Active Directory 同步到 Exchange Online。 请确保已下载此脚本的最新版本,并且正在从 Exchange 命令行管理程序运行该脚本。

    .\Sync-ModernMailPublicFolders.ps1 -CsvSummaryFile:sync_summary.csv
    
    • CsvSummaryFile是你希望同步操作和错误的日志文件所在位置的文件路径。 该日志将为 .csv 格式。

    注意

    如果在脚本过程中Sync-ModernMailPublicFolders.ps1看到任何错误,请使用同步 MEPF 脚本故障排除

  2. 在 Exchange Online PowerShell 中,将具有 Exchange 2013、Exchange 2016 或 Exchange 2019 本地环境中的管理员权限的用户的凭据传递到变量$Source_Credential中。 在 Exchange Online 中运行的迁移请求将使用此凭据访问本地 Exchange 服务器,以便将公用文件夹内容复制到Exchange Online。

    $Source_Credential = Get-Credential <source_domain>\<PublicFolder_Administrator_Account>
    
  3. 在 Exchange Online Powershell 中,将 Exchange 邮箱复制服务的 Internet 可路由完全限定域名 (MRS) 传递到变量$Source_RemoteServer中。 在 Exchange Online 中运行的迁移请求将使用此远程服务器将公用文件夹内容复制到Exchange Online。

    $Source_RemoteServer = "<MRS proxy endpoint server>"
    
  4. 在本地 Exchange 服务器上,打开 Exchange 命令行管理程序,并使用以下命令查找主层次结构邮箱的 GUID:

    (Get-OrganizationConfig).RootPublicFolderMailbox.HierarchyMailboxGuid.GUID
    

    请注意此命令的输出。 将在下一步中用到它。 例如:

    91edc6dd-478a-497c-8731-b0b793f5a986

注意

必须从本地服务器获取上一命令中提到的公用文件夹邮箱 GUID;如果从 Exchange Online 获取,则迁移批处理将失败并出现暂时性错误。

  1. 在 Exchange Online PowerShell 中,运行以下命令,创建公用文件夹迁移终结点和公用文件夹迁移请求:

    $bytes = [System.IO.File]::ReadAllBytes('folder_mapping.csv')
    $PfEndpoint = New-MigrationEndpoint -PublicFolder -Name PublicFolderEndpoint -RemoteServer $Source_RemoteServer -Credentials $Source_Credential
    New-MigrationBatch -Name PublicFolderMigration -CSVData $bytes -SourceEndpoint $PfEndpoint.Identity -SourcePfPrimaryMailboxGuid <guid you noted from previous step> -NotificationEmails <email addresses for migration notifications>
    

    其中 folder_mapping.csv 是在 步骤 3:生成 .csv 文件中 生成的映射文件,是在 HierarchyMailboxGUID 上一步中记录的输出。 请务必提供 的完整文件路径 folder_mapping.csv。 如果出于任何原因移动了映射文件,请务必使用新的位置。

    用逗号分隔多个电子邮件地址。

    注意

你可能会注意到上述命令失败,出现错误“找不到具有邮箱 GUID 的收件人”,其中在 EXO 中提及了公用文件夹邮箱的 GUID。 发生这种情况的原因可能是 AD 复制延迟。 在这种情况下,请等待一小时,然后重试该命令。

  1. 最后,在 Exchange Online PowerShell 中使用以下命令开始迁移:

    Start-MigrationBatch PublicFolderMigration
    

虽然需要使用 powerShell Exchange Online cmdlet 创建New-MigrationBatch批量迁移,但可以在 EAC 或运行 Get-MigrationBatch cmdlet 中查看和管理迁移的进度和完成情况。 cmdlet New-MigrationBatch 会为每个公用文件夹邮箱发起邮箱迁移请求,你可以使用邮箱迁移页查看这些请求的状态。

转到邮箱迁移页:

  1. 登录 Exchange Online 并打开 EAC。

  2. Navigate to Recipients, and then select Migration.

  3. Select the migration request that was just created and then, on the Details pane, select View Details.

在继续执行 步骤 6:锁定 Exchange 本地服务器上的公用文件夹之前,请验证是否已复制所有数据,并且迁移中没有错误。 确认批已移动到“已同步”状态后,运行“步骤 2:准备迁移”中所述的命令,在Exchange Server本地环境中的先决条件步骤下的最后一个步骤中,对本地公用文件夹执行快照。

Once these commands have run, you can proceed to the next step. Note that these commands could take a while to complete depending on the number of folders you have. 迁移过程每隔 24 小时同步一次来自源 (本地) 环境的数据。

可以使用以下 cmdlet 监视迁移:

步骤 6:锁定 Exchange 本地服务器上的公用文件夹, (需要公用文件夹停机)

在迁移过程中的此步骤之前,用户都可以访问你的本地公用文件夹。 以下步骤现在将从Exchange Server公用文件夹注销用户,然后在迁移过程完成最终同步时锁定文件夹。 在此过程中,用户无法访问公用文件夹,并且发送到这些已启用邮件的公用文件夹的任何邮件都会排队,并且在公用文件夹迁移完成前保持未送达状态。

注意

最终同步可能需要很长时间,具体取决于对源环境所做的更改、公用文件夹部署的大小、服务器容量等。 如果文件夹层次结构具有许多在迁移前未清理的损坏 ACL,则完成时间可能会显著延迟。 建议计划至少 48 小时的停机时间,以便完成最终同步。

确保迁移批处理和单个迁移请求已成功同步。

有关详细信息,请在 EXO PowerShell 中运行以下命令:

Get-MigrationBatch |?{$_.MigrationType -like "*PublicFolder*"} | ft *last*sync*

Get-PublicFolderMailboxMigrationRequest | Get-PublicFolderMailboxMigrationRequestStatistics |ft targetmailbox,*last*sync*

有关迁移批处理) 的 LastSyncedDate (,对单个作业) 的 LastSuccessfulSyncTimestamp (应在过去 7 天内。 如果日期过去太远(例如一个多月前),可能需要查看公用文件夹迁移请求,并确保最近同步了所有请求。

确认批处理和所有迁移请求已成功同步后,在本地环境中运行以下命令,锁定Exchange Server公用文件夹以供最终确定。

Set-OrganizationConfig -PublicFolderMailboxesLockedForNewConnections $true

注意

如果无法访问 -PublicFolderMailboxesLockedForNewConnections 参数,可能是因为 ACTIVE Directory 在 CU 升级期间未准备好,正如我们在 开始之前需要了解的内容 中所述的上述建议。有关详细信息 ,请参阅准备 Active Directory 和域 。 另请注意,在迁移公用文件夹本身之前,应首先迁移任何需要访问公用文件夹的用户。

如果组织在多个 Exchange 服务器上具有公用文件夹邮箱,则需要等待 Active Directory 复制完成。 完成后,可以确认所有公用文件夹邮箱都已选取 PublicFolderMailboxesLockedForNewConnections 标志,并且用户最近对其公用文件夹所做的任何挂起的更改已在组织中聚合。 整个过程可能需要几个小时的时间。

在本地环境中运行以下命令,确保锁定公用文件夹:

Get-PublicFolder \

如果锁定公用文件夹,预期结果为:

Couldn't find the public folder mailbox. + CategoryInfo : NotSpecified: (:) [Get-PublicFolder], ObjectNotFoundException

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

在完成公用文件夹迁移之前,需要检查以下各项:

  1. 确认本地 Exchange 环境中没有进行其他公用文件夹邮箱移动或公用文件夹移动。 为此,请使用 Get-MoveRequestGet-PublicFolderMoveRequest cmdlet 列出任何现有的公用文件夹移动。 如果有任何移动 in 进度,或处于 “已完成” 状态,请将其删除。

  2. 此时,建议重新运行以下脚本,以确保任何新的启用邮件的公用文件夹都与Exchange Online同步:

    .\Sync-ModernMailPublicFolders.ps1 -CsvSummaryFile:sync_summary.csv
    
  3. 如果环境有多个 Active Directory 域,请确保在启动完成之前执行 Complete-MigrationBatch 命令时出现“找不到活动公用文件夹邮箱”错误中的步骤和迁移批处理失败

  4. 若要完成公用文件夹迁移,请在 Exchange Online PowerShell 中运行以下命令:

    Complete-MigrationBatch PublicFolderMigration
    

重要

完成迁移批处理后,无法从本地 Exchange 服务器同步其他数据,Exchange Online。

运行 Complete-MigrationBatch PublicFolderMigration时,Exchange 将在 Exchange 本地组织和Exchange Online之间执行最终同步。 During this period, the status of the migration batch will change from Synced to Completing, and then finally to Completed. If the final synchronization is successful, the public folders in Exchange Online will be unlocked. 但是,强烈建议在向用户打开公用文件夹之前完成本文的步骤 8 和步骤 9。

迁移批处理的状态通常会在切换到“正在完成”之前保持“已同步”数小时。 对于涉及大量目标邮箱的迁移,如果基础公用文件夹迁移请求均未失败或已隔离,则通常会看到状态保持“ 已同步 ”状态超过 24 小时。

步骤 8:测试和解锁 Exchange Online 中的公用文件夹

完成公用文件夹迁移后,执行以下步骤测试迁移是否成功,并正式验证其是否完成。 这些最后的任务让你可以先测试迁移的公用文件夹层次结构,然后再将组织永久切换到 Exchange Online 公用文件夹。

  1. 在 Exchange Online PowerShell 中,配置一些测试用户邮箱,以使用新迁移的公用文件夹邮箱之一作为其默认公用文件夹邮箱:

    Set-Mailbox -Identity <test user> -DefaultPublicFolderMailbox <public folder mailbox identity>
    

    请确保测试用户具有必要的权限来创建公用文件夹。

  2. 使用上一步中指定的测试用户登录 Outlook ,然后执行以下公用文件夹测试。 请注意,可能需要 15 到 30 分钟更改才会生效。 Outlook 获知更改后,它可能会提示你重新启动几次。

    a. 查看层次结构。

    b. 检查权限。

    c. 创建一些公用文件夹,然后删除它们。

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

    如果遇到任何问题,并确定尚未准备好将组织的公用文件夹完全切换到Exchange Online,请参阅将公用文件夹从Exchange Server回滚到Exchange Online

  3. 在 Exchange Online PowerShell 中运行以下命令以解锁 Exchange Online 中的公用文件夹。 运行该命令后,可能需要大约 15 到 30 分钟才能使更改生效。 Outlook 获知更改后,可能会提示用户重新启动 Outlook 几次。

    Set-OrganizationConfig -RemotePublicFolderMailboxes $Null -PublicFoldersEnabled Local
    

步骤 9:完成本地迁移

若要向本地启用邮件的公用文件夹启用电子邮件,请执行以下步骤:

  1. 在本地环境中运行以下命令,对队列中发送到已启用邮件的公用文件夹的电子邮件进行备份。 如果电子邮件传递到已启用邮件的公用文件夹因任何原因失败,可以使用此备份:

    $Server=Get-TransportService;ForEach ($t in $server) {Get-Message -Server $t -ResultSize Unlimited| ?{$_.Recipients -like "*PF.InTransit*"} | ForEach-Object {Suspend-Message $_.Identity -Confirm:$False; $Temp="C:\ExportFolder\"+$_.InternetMessageID+".eml"; $Temp=$Temp.Replace("<","_"); $Temp=$Temp.Replace(">","_"); Export-Message $_.Identity | AssembleMessage -Path $Temp;Resume-message $_.Identity -Confirm:$false}}
    
  2. 在本地环境中,运行以下脚本,确保发送到已启用邮件的公用文件夹的所有电子邮件正确路由到 Exchange Online。 该脚本将标记已启用邮件的公用文件夹,其中指向ExternalEmailAddress其Exchange Online对应文件夹:

    .\SetMailPublicFolderExternalAddress.ps1 -ExecutionSummaryFile:mepf_summary.csv
    
  3. 如果测试成功,则在本地环境中,运行以下命令来指示公用文件夹迁移已完成:

    Set-OrganizationConfig -PublicFolderMailboxesMigrationComplete:$true -PublicFoldersEnabled Remote
    

我如何知道这有效?

步骤 2:准备迁移中,你获取了本地公用文件夹结构、统计信息和权限的快照。 以下步骤将帮助你通过在 Exchange Online 迁移后过程中获取这些相同的快照,验证公用文件夹是否成功迁移。 比较这两个文件中的数据可以验证是否成功。

  1. 在 Exchange Online PowerShell 中,运行以下命令以获取新文件夹结构的快照:

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

    Get-PublicFolder -Recurse -ResultSize Unlimited | Get-PublicFolderStatistics | Export-CliXML Cloud_PFStatistics.xml
    
  3. 在 Exchange Online PowerShell 中,运行以下命令以获取权限的快照:

    Get-PublicFolder -Recurse -ResultSize Unlimited | Get-PublicFolderClientPermission | Select-Object Identity,User,AccessRights | Export-CliXML Cloud_PFPerms.xml
    
  4. Exchange Online PowerShell 中,运行以下命令以快照已启用邮件的公用文件夹:

    Get-MailPublicFolder -ResultSize Unlimited | Export-CliXML Cloud_MEPF.xml
    

注意

迁移后,如果外部电子邮件在 Exchange Online 中失败启用了邮件的公用文件夹并出现 5.7.13 或 5.4.1 错误,请确保公用文件夹为匿名用户启用了 CreateItems 权限,并针对在公用文件夹上配置的电子邮件域禁用基于域的边缘阻止 (DBEB)

已知问题

以下是组织中可能会遇到的常见公用文件夹迁移问题。

  • 当Exchange Online中唯一公用文件夹邮箱超过 100 个时,不支持将公用文件夹迁移到 Exchange Online。

  • 根公用文件夹和 EFORMS REGISTRY 文件夹的权限不会迁移到 Exchange Online,并且必须手动将它们应用于 Exchange Online。 若要执行此操作,请在 Exchange Online PowerShell 中运行以下命令。 为存在于本地环境中但在 Exchange Online 中缺失的每个权限条目运行一次命令:

    Add-PublicFolderClientPermission "\" -User <user> -AccessRights <access rights>
    Add-PublicFolderClientPermission "\NON_IPM_SUBTREE\EFORMS REGISTRY" -User <user> -AccessRights <access rights>
    
  • 有一个已知的问题,如果某些公用文件夹邮箱没有为公用文件夹层次结构提供服务,一些公用文件夹迁移将失败。 这意味着一 IsExcludedFromServingHierarchy 个或多个邮箱上的 参数设置为 $true。 若要避免此问题,请在 Exchange Online 中将所有邮箱设置为对层次结构提供服务。

  • 代理发送代表发送权限无法迁移到 Exchange Online。 如果迁移期间发生这种情况,请在本地环境中使用以下命令来备注拥有这些权限的人员。

    查看哪些公用文件夹具有本地代理发送权限:

    Get-MailPublicFolder | Get-ADPermission | ?{$_.ExtendedRights -like "*Send-As*"}
    

    查看哪些公用文件夹具有本地代表发送权限:

    Get-MailPublicFolder | ?{$_.GrantSendOnBehalfTo -ne "$null"} | Format-Table name,GrantSendOnBehalfTo
    

    若要在 Exchange Online 中将代理发送权限添加至已启用邮件的公用文件夹,请在 Exchange Online PowerShell 中键入以下内容:

    Add-RecipientPermission -Identity <mail-enabled public folder primary SMTP address> -Trustee <name of user to be assigned permission> -AccessRights SendAs
    

    示例

    Add-RecipientPermission -Identity send1 -Trustee Exo1 -AccessRights SendAs
    

    若要在 Exchange Online 中将代表发送权限添加至已启用邮件的公用文件夹,请在 Exchange Online PowerShell 中键入以下内容:

    Set-MailPublicFolder -Identity <name of public folder> -GrantSendOnBehalfTo <user or comma-separated list of users>
    

    示例

    Set-MailPublicFolder send2 -GrantSendOnBehalfTo exo1,exo2
    
  • 如果"\NON_IPM_SUBTREE\DUMPSTER_ROOT"文件夹下包含的文件夹数量超过 10,000 个,则会导致迁移失败。 因此,请检查"\NON_IPM_SUBTREE\DUMPSTER_ROOT"文件夹,以查看其直接包含的文件夹(直接子级)数量是否超过了 10,000 个。 可以使用以下命令查看该位置中公用文件夹的数量:

    (Get-PublicFolder -GetChildren "\NON_IPM_SUBTREE\DUMPSTER_ROOT").Count
    

    Exchange Online 支持的子文件夹数量不超过 10,000 个,因此迁移 10,000 个以上的文件夹将失败。 目前我们正在开发脚本来破除此类配置。 在此期间,建议耐心等待以迁移公用文件夹。

  • 迁移作业没有进展或已停止。 如果并行运行的作业数量太多,导致作业出现间歇性错误而失败,则可能会出现此状况。 可以通过修改 MaxConcurrentMigrationsMaxConcurrentIncrementalSyncs 减少并发作业数。 使用以下示例来设置这些值:

    Set-MigrationEndpoint <PublicFolderEndpoint> -MaxConcurrentMigrations 30 -MaxConcurrentIncrementalSyncs 20 -SkipVerification
    
  • 迁移作业失败,出现错误"错误: 垃圾站文件夹的垃圾站。"如果看到此错误,停止批处理然后重启批处理应该可以解决此问题。

  • 迁移作业失败,出现错误“由于以下错误而隔离了请求:字典中不存在给定的密钥”。当迁移作业无法复制的文件夹中存在损坏的项时,就会发生这种情况。 若要解决此问题,请执行以下操作:

    1. 停止迁移批处理。

    2. 标识包含错误项的文件夹。 迁移报告应包括对发生错误时正在复制的文件夹的引用。

    3. 在本地环境中,将受影响的文件夹移动到主公用文件夹邮箱。 可以使用 New-PublicFolderMoveRequest cmdlet 移动文件夹。

    4. 等待文件夹移动完成。 在完成之后删除移动请求。 最后,重启迁移批处理。

从 Exchange 本地环境中删除公用文件夹邮箱

在完成迁移并确认 Exchange Online 中的公用文件夹按预期方式工作且包含所有预期数据后,可以删除本地公用文件夹邮箱。

请注意,此步骤是不可逆的,因为一旦删除公用文件夹邮箱,它们将无法恢复。 因此,强烈建议除了验证迁移是否成功外,还需要花几周时间监视 Exchange Online 公用文件夹,然后再删除本地公用文件夹邮箱。

使用 Outlook PST 导出将公用文件夹迁移到 Microsoft 365 或 Office 365

如果本地公用文件夹层次结构大于 30 GB,建议不要使用 Outlook 的 PST 导出功能将公用文件夹迁移到 Microsoft 365 或Office 365或Exchange Online。 Microsoft 365 和 Office 365 联机公用文件夹邮箱增长使用自动拆分功能进行管理,该功能在超过大小配额时拆分公用文件夹邮箱。 当您使用 PST 导出功能迁移公用文件夹时,自动拆分无法应对公用文件夹邮箱的突然增长,您可能必须至少等待两星期,自动拆分才会将数据从主邮箱中移出。 此外,在使用 Outlook PST 将公用文件夹导出到 Microsoft 365、Office 365或Exchange Online之前,请考虑以下事项:

  • 在此过程中,公用文件夹权限将会丢失。 在迁移之前捕获当前权限,并在迁移完成后手动将其添加回去。

  • 如果您使用复杂权限或有很多文件夹要迁移,我们建议使用 cmdlet 方法进行迁移。

  • PST 导出迁移期间对源公用文件夹所做的任何项目和文件夹更改都将丢失。 因此,如果此导出和导入过程需要很长一段时间才能完成,我们建议您使用 cmdlet 方法。

如果您还是想使用 PST 文件迁移公用文件夹,请按照以下步骤操作,以确保迁移成功。

  1. 使用第 1 步:下载迁移脚本中的说明下载迁移脚本。 只需下载文件 PublicFolderToMailboxMapGenerator.ps1

  2. 按照 步骤 3:生成 .csv 文件 的步骤 2 创建公用文件夹到邮箱的映射文件。 此文件用于计算 Exchange Online 中公用文件夹邮箱的正确数量。

  3. 创建所需的公用文件夹邮箱,具体取决于映射文件。 有关详细信息,请参阅 使用 EAC 创建公用文件夹邮箱

  4. 使用 New-PublicFolder cmdlet 使用 Mailbox 参数在每个公用文件夹邮箱中创建最顶层的 公用文件夹

  5. 使用 Outlook 导出和导入 PST 文件。

  6. 使用 EAC 设置公用文件夹的权限。 有关详细信息,请按照设置新组织中的公用文件夹一文中的步骤 3:分配对公用文件夹的权限。

警告

如果已启动 PST 迁移,但遇到主邮箱已满的问题,则可以选择两个选项来恢复 PST 迁移:

第一个选项是等待自动拆分从主邮箱移动数据。 此过程可能最多需要两星期。 但是,在自动拆分完成之前,全满公用文件夹邮箱中的所有公用文件夹都无法接收新内容。

选项二是在 Exchange Server 中创建公用文件夹邮箱,然后使用 New-PublicFolder cmdlet 和 Mailbox 参数在辅助公用文件夹邮箱中创建剩余的公用文件夹。

排查公用文件夹迁移问题

对于公用文件夹迁移过程中的常见问题,请选择以下按钮:

浮出控件页将在Microsoft 365 管理中心中打开,使用租户管理员帐户登录并选择相应的选项