如何 – Office 365到Office 365迁移(逐步)

如何 – Office 365到Office 365迁移(分步指南)。从一个Office 365环境迁移到另一个需要仔细规划和执行,以确保无缝过渡而不损害数据完整性。本综合指南概述了Office 365跨租户邮箱迁移的逐步过程,强调了关键阶段。通过遵循这些详细步骤,组织可以简化其迁移旅程并减少对其日常运营的潜在干扰。在本指南中,我们描述了使用内置的跨租户用户数据迁移工具进行迁移的过程。以及其他的工具,它有其优点(不需要购买第三方工具)和缺点(不支持公共文件夹迁移,需要一些PowerShell脚本技能),适用于小型和大型企业。

让我们开始我们的文章如何 – Office 365到Office 365迁移。

如何 – Office 365到Office 365迁移

1. Office 365到Office 365迁移前的评估

首先,确保收集以下信息:

  1. 法律保留使用。应用了保留策略的邮箱和OneDrive账户不能迁移到另一个租户。
  2. 存档启用的邮箱。在属性匹配期间(在帐户准备期间显示如下),已存档邮箱的用户必须在源和目标租户中具有匹配的ExchangeGUIDArchiveGUID属性。
  3. 现有的代表发送权限委派。此权限不会迁移,必须在迁移后重新配置。如果您希望使用 PowerShell 脚本评估委派列表,请确保将无法在目标租户中使用的 Distinguished Name 属性(例如显示名称)转换为某个在迁移后保持不变的属性。以下是可用于收集信息的脚本示例(要运行它,请先连接到 Exchange Online PowerShell 模块):
$delegatedmailboxes = get-mailbox -resultsize unlimited | ?{$_.GrantSendOnBehalfTo -ne $null} | select displayname,GrantSendOnBehalfTo

$FilePath = "C:\output\delegatee.csv" #使用您自己的文件路径,确保该文件夹存在
Add-Content -Value ("Delegator" + "," + "Delegatee") -Path $FilePath
foreach ($delegatedmailbox in $delegatedmailboxes) {
    $delegatees = $delegatedmailbox.GrantSendOnBehalfTo
    foreach ($delegatee in $delegatees) {
        $delegateeName = get-mailbox $delegatee
        $delegatedmailbox.Displayname + "," + $delegateeName.Displayname | out-file $FilePath -append
    }
}

该脚本创建一个包含租户中所有代表发送权限委派信息的 CSV 文件。迁移后可以使用该文件重新创建委派。请注意,CSV 文件使用逗号作为分隔符,因此如果在您公司的用户的显示名称属性中使用逗号,请相应调整脚本(例如使用制表符作为分隔符)。

  1. 确保在源租户和目标租户都有必要的权限。初始配置需要 组织管理员 角色(用于配置组织关系),以及在 Azure AD 中注册 应用程序 的能力(以便在后续步骤中注册迁移应用程序)。迁移本身不需要高权限,可以通过具有 移动邮箱 权限的帐户来完成。
  2. 确保在源租户和目标租户都有必要的许可证。您需要为所有迁移的用户购买 Microsoft 365 许可证和跨租户用户数据迁移许可证。确保在迁移之前分配了跨租户用户数据迁移许可证。在目标租户中,确保在将 Exchange Online 许可证 分配给用户之前,没有分配 ExchangeGUID 属性和代理地址,因为这会导致迁移失败(因为将具有不同 GUID 的邮箱分配给邮箱)。
  3. 获取并记录两个租户的租户 ID,如 查找 Microsoft 365 租户 ID 文章所述。同时,通知最终用户关于预期影响:

A note to users

另外,通知最终用户预期影响:

  • 邮箱在迁移期间将进入只读模式一小段时间。
  • 用户必须在迁移后在桌面和移动设备上重新创建Outlook配置文件。
  • Microsoft 365 应用可能需要重新激活。
  • 如果OneDrive或SharePoint被映射为网络驱动器,它们将需要重新映射。
  • 现有的Teams会议将需要重新创建
  • Microsoft 365 群组将不会被迁移。

2. 在Microsoft Entra注册迁移应用

为了让Microsoft将用户从两个租户迁移,您需要在目标租户的Microsoft Entra(错过更新的人请注意,Entra是Microsoft现在称为Azure AD的方式)中注册应用,并为其授予Mailbox.Migration权限。此外,还需要创建用于创建迁移终点的密钥(迁移终点是包含设置和凭据以执行外部迁移的配置实体)。

  1. 前往Microsoft Entra管理中心,使用可以注册应用程序的帐户登录。
  2. 导航至应用程序 > 应用程序注册,并选择新注册
  1. 在出现的注册应用程序窗口中,输入名称(任何名称都可以),选择任何组织目录中的帐户(任何Microsoft Entra目录 – 多租户)选项作为支持的帐户类型,并指定https://office.com作为 Web 重定向 URI,然后按注册
  1. 返回应用程序注册页面,选择创建的应用程序。
  2. 在打开的页面中,在概述选项卡中,找到应用程序(客户端)ID并记下以备后用。
  1. 转到API权限选项卡,然后按添加权限
  1. 在出现的窗口中,导航至我的组织使用的API选项卡,并选择Office 365 Exchange Online
  1. 转到应用程序权限,在列表中选择邮箱 > 邮箱迁移,然后按添加权限按钮。
  1. 授予权限后,转到证书和密码选项卡(在应用程序页面的导航窗格中),在客户端密码部分,选择新客户端密码
  1. 在填写两个字段后,点击添加
  1. 返回到证书与密码页面,您会看到新的密钥ID和密码,请记下以备将来使用

3. 准备目标 Office 365 租户

在接下来的步骤中,我们在目标租户中为注册应用程序授予管理员同意,然后创建迁移端点和组织关系。组织关系在 Exchange Online 中用于向外部方提供对内部资源的访问权限。此功能的最常见用途是向合作伙伴组织提供对日历信息的读取权限(以共享可用状态),但也可用于其他访问类型。在我们的情况下,我们提供邮箱迁移功能。

  1. 在 Microsoft Entra 管理中心,导航至应用程序 > 企业应用程序
  2. 在应用程序列表中选择创建的迁移应用程序。
  3. 应用程序页面出现后,导航至权限选项卡,然后点击为 [您的租户名称] 授予管理员同意
  1. 应用程序页面出现后,导航到权限选项卡,并点击为[您的租户名称]授予管理员同意。
  1. 新的浏览器窗口将打开,请接受权限授予。
  2. 要在目标租户中创建迁移终点和组织关系,请打开PowerShell 并连接到 Exchange Online 模块
  3. 接下来,检查您的 Exchange 组织是否处于脱水状态。如果是,无法自定义组织设置。
Get-OrganizationConfig | select isDehydrated
  1. 如果输出为False,则可以忽略此步骤;如果为True,运行Enable-OrganizationCustomization 命令。
  2. 创建迁移终点:
$AppId = "[Application ID saved in step 2.5]"
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $AppId, `
(ConvertTo-SecureString -String "[secret password saved in step 2.11]" -AsPlainText -Force)
New-MigrationEndpoint -RemoteServer outlook.office.com -RemoteTenant ".onmicrosoft.com" `
-Credentials $Credential -ExchangeRemoteMove:$true -Name "MigrationEndpoint01" -ApplicationId $AppId

其中“<SourceDomain>.onmicrosoft.com”是您要迁移用户的域

  1. 创建组织关系(或修改它,如果关系已存在):
$sourceTenantId="[ID of the source tenant from step 1.6]"
$existingOrgRel = Get-OrganizationRelationship | ?{$_.DomainNames -like $sourceTenantId}
If ($null -ne $existingOrgRel) {
    Set-OrganizationRelationship $existingOrgRel.Name -Enabled:$true -MailboxMoveEnabled:$true -MailboxMoveCapability Inbound
}
Else {
    New-OrganizationRelationship "SourceTenant" -Enabled:$true -MailboxMoveEnabled:$true -MailboxMoveCapability Inbound -DomainNames $sourceTenantId
}

4. 准备源 Microsoft 365 租户

  1. 登录到源租户 Microsoft Entra 管理控制台。
  2. 转到 URL https://login.microsoftonline.com/<TargetTenant>.onmicrosoft.com/adminconsent?client_id=[Application ID]&redirect_uri=https://office.com,其中 <TargetTenant> 替换为您要移动邮箱的租户的域名,而 Application ID 是之前保存的那个。
  3. 在弹出的窗口中,接受向应用程序授予权限。
  1. 连接到源租户的 Exchange Online PowerShell(如果您从同一台计算机准备了两个租户,则需要使用不同的 UserPrincipalName 参数再次运行 Connect-ExchangeOnline)。
  2. 重复上一节中步骤 3.6 和 3.7。
  3. 创建一个新的邮件启用的 安全组。用于定义将要移动的用户:
$UserGroup="[name of the group]" ; New-DistributionGroup -Type Security -Name $UserGroup
  1. 创建组织关系(或修改它,如果关系已经存在):
$targetTenantId="[ID of the target tenant saved in step 1.6]"
$AppId="[Application ID]"
$existingOrgRel = Get-OrganizationRelationship | ?{$_.DomainNames -like $targetTenantId}
If ($null -ne $existingOrgRel) {
    Set-OrganizationRelationship $existingOrgRel.Name -Enabled:$true -MailboxMoveEnabled:$true `
    -MailboxMoveCapability RemoteOutbound -OAuthApplicationId $AppId -MailboxMovePublishedScopes $UserGroup
}
Else {
    New-OrganizationRelationship "TargetTenant" -Enabled:$true -MailboxMoveEnabled:$true -DomainNames $targetTenantId `
    -MailboxMoveCapability RemoteOutbound  -OAuthApplicationId $AppId -MailboxMovePublishedScopes $UserGroup
}
  1. 将计划迁移的所有用户移动到第 6 步中创建的组中。请记住,不建议使用 嵌套组

5. 准备目标租户中的用户帐户

跨租户移动邮箱需要在目标域中预先创建 MailUser 对象。这些对象必须具有与源邮箱属性匹配的属性,更多详细信息请参见此处。确保EmailAddresses属性已正确配置:它必须包含源邮箱的LegacyExchangeDN属性作为 X500 代理地址。执行属性匹配的最简单方法是使用 PowerShell

  1. 在源租户 PowerShell 会话中运行以下脚本,将用户属性导出到 XML 文件中(在这种情况下,XML 比 CSV 更合适,因为某些属性是数组)。
$UserAttributes = "C:\output\UserAttributes.xml" #使用您自己的文件路径,确保文件夹存在
Get-DistributionGroupMember -ResultSize Unlimited $UserGroup | ForEach-Object {Get-Mailbox $_.DisplayName}| `
Select-Object PrimarySMTPAddress,Alias,SamAccountName,FirstName,LastName,DisplayName,Name,ExchangeGuid,`
ArchiveGuid,LegacyExchangeDn,EmailAddresses | Export-Clixml $UserAttributes
  1. 在创建MailUser对象时,请指定密码。因此,在目标租户的PowerShell会话中准备一些用于生成密码的PowerShell函数。例如,下面的函数是基于PowerShell Gallery中可用的Get-RandomPassword函数创建的。
$symbols = '!@#$%^&amp;*'.ToCharArray()
$characterList = @([char[]]([char]'a'..[char]'z'), [char[]]([char]'A'..[char]'Z'), [char[]]([char]'0'..[char]'9') + $symbols)

function Get-RandomPassword  {
    param(
        [ValidateRange(12, 256)]
        [int]
        $length = 16
    )

    do {
        $password = -join (0..$length | ForEach-Object { $characterList | Get-Random })
        [int]$hasLowerChar = $password -cmatch '[a-z]'
        [int]$hasUpperChar = $password -cmatch '[A-Z]'
        [int]$hasDigit = $password -match '[0-9]'
        [int]$hasSymbol = $password.IndexOfAny($symbols) -ne -1
    }
    until (($hasLowerChar + $hasUpperChar + $hasDigit + $hasSymbol) -ge 3)

    $password | ConvertTo-SecureString -AsPlainText -Force
}
  1. 在目标租户的PowerShell会话中,运行以下脚本以创建MailUser对象。此外,它还会创建一个在迁移批次创建过程中使用的CSV文件。
$MailUsers = Import-Clixml $UserAttributes
$Organization = "@.onmicrosoft.com" #使用目标租户名称
$CSVData = "C:\output\CSVData.csv" #使用您自己的文件路径,请确保文件夹存在
Add-Content -Value ("EmailAddress") -Path $CSVData
foreach ($MailUser in $MailUsers) {
    $SMTPAddress = $MailUser.Alias + $Organization
    $SMTPAddress  | out-file $CSVData -append
    $Password = Get-RandomPassword
    $x500 = "x500:" + $MailUser.LegacyExchangeDn
    $UserObject = New-MailUser -MicrosoftOnlineServicesID $SMTPAddress -PrimarySmtpAddress $SMTPAddress `
    -ExternalEmailAddress $MailUser.PrimarySmtpAddress -FirstName $MailUser.FirstName -LastName $MailUser.LastName `
    -Name $MailUser.Name -DisplayName $MailUser.DisplayName -Alias $MailUser.Alias -Password $Password
    $UserObject | Set-MailUser -EmailAddresses @{add = $x500 } -ExchangeGuid $MailUser.ExchangeGuid -ArchiveGuid $MailUser.ArchiveGuid
    $ProxyX500 = $MailUser.EmailAddresses | Where-Object { $_ -match "x500" }
    $ProxyX500 | ForEach-Object { Set-MailUser $MailUser.Alias -EmailAddresses @{add = "$_" } }
}
  1. 确保在目标租户中正确创建了对象后,为用户分配Exchange Online许可证。
  2. 为验证配置,从源租户的PowerShell会话中运行:
Test-MigrationServerAvailability -EndPoint "MigrationEndpoint01" -TestMailbox "[primary SMTP address of the target user mailbox]"

6. 用户帐户移动和迁移完成

在 Office 365 到 Office 365 跨租户迁移期间,邮箱将使用迁移批次移动。迁移批次是更改列出的邮箱位置的请求。批次是使用 Exchange Online 管理中心或使用 PowerShell 命令 New-MigrationBatch 创建的。

  1. 从源租户 PowerShell 会话创建迁移批次。确保之前创建的 CSV 文件路径正确。
New-MigrationBatch -Name Batch01 -SourceEndpoint "MigrationEndpoint01" -CSVData ([System.IO.File]::ReadAllBytes("C:\output\CSVData.csv"))`
-Autostart -TargetDeliveryDomain .onmicrosoft.com

请注意,Microsoft 不建议使用超过 2000 用户的批次。如果要移动大量邮箱,请创建多个批次。

  1. 通过 PowerShell(使用 Get-MigrationStatistics 命令)或在 Exchange Online 管理中心(登录到 https://admin.exchange.microsoft.com/ 并导航到 主页> 迁移批次)监视批次移动进度,查找错误和警告。
  2. 然后,使用之前创建的包含委派信息的文件重新配置 代表发送 权限。要执行此操作,请在目标租户 PowerShell 会话中运行以下命令:
$delegateelist = Import-Csv "C:\output\delegatee.csv"
foreach ($mailbox in $delegateelist ) {
    Set-Mailbox $mailbox.Delegator -GrantSendOnBehalfTo $mailbox.delegatee)
}

完成所有步骤后,随时可以删除创建的迁移终点组织关系

操作指南 – Office 365 到 Office 365 迁移总结

在 Office 365 环境之间成功迁移邮箱需要对多个步骤进行全面评估和精确执行。本指南为 IT 专业人员提供了一个全面的路线图,以帮助他们处理关键考虑因素、权限和迁移设置。通过遵循这些步骤,组织可以进行平稳高效的邮箱迁移过程,确保最小化停机时间并保持数据完整性。

Source:
https://infrasos.com/how-to-office-365-to-office-365-migration/