租户到租户迁移

租户到租户迁移功能允许您将环境从一个租户转移到另一个租户。 此功能支持将多个租户合并为一个租户并促进公司收购等方案。 环境实际上并没有移动,而是链接到另一个租户。 环境仍然存在,但不再是源租户的一部分。 它可以在目标租户下访问和管理。 在此迁移中,不会出现用户界面变化或版本变更。

赛前须知

在开始租户到租户迁移之前,请注意以下注意事项。

  • 支持的环境类型:仅限生产环境和沙盒环境。
  • 不支持的环境类型:不支持默认、开发者、试用和 Teams 环境类型。 不支持从政府社区云(GCC)到公有云,反之亦然。
  • 不支持的组件包括 Dynamics 365 Customer Voice、Customer Service 全渠道、组件库、Dynamics 365 Customer Insights - Journeys 和 Dynamics 365 Customer Insights - Data。
  • 对于 Power Apps、Power Automate、Power Pages 和 Microsoft Copilot Studio,在迁移前和迁移后步骤中都有具体要求。
  • 链接到财务和运营组织的 Dataverse 组织不能迁移到其他租户。
  • 您可能需要在租户间迁移后重新配置一些应用程序和设置,如 Microsoft Dynamics 365 for Outlook、服务器端同步、SharePoint 等。
  • 创建和配置用户后,必须创建用户映射文件,本文稍后将对此进行介绍。
  • 如果映射的用户在目标租户中有邮箱,在迁移过程中会自动配置该邮箱。 对于所有其他用户,需要重新配置邮箱。
  • 如果目标租户 test@microsoft.com 使用了相同的邮箱,则默认使用该邮箱。 在租户到租户迁移之前,客户需要在目标租户上迁移和配置邮箱。
  • 如果您使用的是默认的 onmicrosoft 域 (test@sourcecompanyname.onmicrosoft.com),迁移后的域名将更改为 test@targetcompanyname.onmicrosoft.com。 客户需要重新配置邮箱。 在连接到 Exchange Online 中了解有关配置邮箱的更多信息。

先决条件

在开始迁移过程之前,请确保完成以下先决条件。

  • 在目标租户中创建用户,包括:
    • 在 Microsoft 365 和 Microsoft Entra ID 中创建用户。
    • 分配许可证。
  • 您必须具有 Power platform 管理员或 Dynamics 365 管理员权限才能执行迁移。
  • Power Platform 管理员的 PowerShell 模块是用于与管理员功能交互的推荐 PowerShell 模块。 了解更多信息,请参阅 Power Platform 管理员的 PowerShell 入门

准备过程

迁移前,完成 Power Automate、Power Apps、Copilot Studio 和 Power Pages 的以下程序。 您还必须创建用户映射文件。

准备Power Automate

如果您的流已在 Dataverse 中定义,则无需额外工作。

任何需要迁移的 Power Automate 流都需要在源环境中将其定义添加到 Dataverse 解决方案中。 更多信息请参阅将现有云端流添加到解决方案中。 可以通过运行 Add-AdminFlowsToSolution cmdlet 来批量添加。

准备Power Apps

任何 Power Apps 必须手动导出。 我们不支持客户连接器、连接或网关的迁移。 如果您设置了这些组件中的任何一个,则必须在迁移后手动重新配置它们。

对于解决方案感知应用程序:

  1. 对于解决方案感知应用程序,请转到 Power Apps,导航到解决方案页面,然后导出所有应用程序和解决方案。 您可以单独导出它们,也可以将它们组合到一个解决方案中(如果尚未导出)。

  2. 导出后删除环境中的这些解决方案感知应用。

  3. 属于托管解决方案的应用只能通过删除解决方案来删除。

  4. 可以使用从此环节中删除选项,删除未托管解决方案中的应用程序。

    重要提示

    迁移之前未从环境中删除的解决方案感知画布应用、自定义页面或组件库在迁移完成后不起作用。

对于非解决方案感知应用程序:

  1. 转到 Power Apps,然后选择应用

  2. 对于要移动的每个应用,选择更多命令,然后选择导出包(预览)

  3. 填写执行应用导出所需的详细信息,然后选择导出。 导出完成后,将开始下载。

    所生成的文件包含选定的应用包。

  4. 重复上述步骤,直到所有应用全部导出。

  5. 从环境中删除这些非解决方案感知应用程序

管理员还可以通过完成以下步骤,从管理门户的列表中查看或删除画布应用程序。

  1. 转到 Power Platform 管理中心,然后从管理中选择环境。
  2. 资源操作下,选择 Power Apps 查看并删除它们。

准备Copilot Studio

任何 Copilot Studio 机器人都必须手动导出。 在迁移期间或之后,必须手动重新配置聊天机器人的某些相关组件。 例如,必须在迁移期间或迁移后手动重新配置连接、环境变量和自定义连接器。

聊天机器人可识别解决方案。 转到 Power Apps,导航到解决方案页面,然后导出所有聊天机器人解决方案,既可以单独导出,也可以将它们组合到一个解决方案中。 更多信息,请参阅使用解决方案导出和导入机器人

准备Power Pages

必须对环境中的每个网站执行以下步骤。

  1. 登录到环境。
  2. 打开管理中心
  3. 删除网站。

创建用户映射文件

为要传输到目标环境的源环境创建用户映射文件。 请务必注意,每个环境都需要一个单独的映射文件。 请确保用户在原始租户和目标租户中都存在并获得授权,因为这是成功迁移所必需的。 用户的域可能因源和目标而异,前提是它们处于活动状态。

  1. 创建名为 usermapping.csv 的用户映射文件。

    备注

    文件名区分大小写。 确保记录用逗号分隔,而不是分号。

  2. 准确记录用户的详细信息,包括其源和目标电子邮件 ID。 确保标题前后没有多余的空格。 映射文件应如下所示:

    Source 目标
    SourceUser@sourcetenant.com DestinationUser@targettenant.com

对于完全访问权限用户:

  1. 访问源环境。

  2. 使用高级查找查找用户。

  3. 选择使用保存的视图 > 完全访问权限用户,然后选择编辑列

  4. 删除全名之外的所有列。

  5. 选择添加列 > Windows Live ID

  6. 选择确定 > 结果查看完全访问权限用户的列表。

  7. 选择所有记录,在功能区中选择导出用户,然后选择静态工作表

  8. 如有可能,请对目标租户执行上面的步骤 1 到 7。 您现在应该有两个单独的 Excel 工作表 - 一个用于源,一个用于目标租户。

  9. 打开 Excel 文件进行编辑。

  10. 从源 Excel 工作表开始,将 Windows Live ID 列下的记录复制到记事本中。 不要复制标头。

  11. 保存记事本文件。

  12. 在相应源 UPN 右侧的同一记事本文档中输入目标 Windows Live ID(UPN)。 请务必用逗号(,)分隔源 UPN 和目标 UPN。

    示例:

    • user001@source.comuser001@destination.com
    • user002@source.comuser002@destination.com
    • user003@source.comuser003@destination.com
  13. 将文件保存为 CSV。

对于管理员访问权限用户:

  1. 访问源环境。
  2. 使用高级查找查找用户。
  3. 选择使用保存的视图 > 管理员访问权限用户,然后选择结果查看管理员访问权限用户的列表。
  4. 如果您决定不包括这些用户的任何一个,请跳过以下步骤。 否则,要在映射文件中包含这些用户,请执行以下操作:
    1. 在目标租户中找到相应的用户。
    2. 确保为目标租户中的目标用户分配了有效的许可证。

      备注

      如果没有为目标用户分配任何许可证,迁移将失败。

    3. 保存映射了完全访问权限用户和管理员访问权限用户的 CSV 文件。

迁移

在继续迁移之前,请确保您已查看并完成准备过程。 完成准备过程后,请完成以下部分进行迁移。

为 Power Platform 管理员(源管理员和目标管理员)安装 PowerShell

Power Platform 管理员的 PowerShell 模块是用于与管理员功能交互的推荐 PowerShell 模块。 有关帮助您开始使用 PowerShell for Power Platform Administrators 模块的信息,请转到开始使用 PowerShell for Power Platform Administrators安装 PowerShell for Power Platform Administrators

使用以下命令之一安装或更新必要的模块:

Install-Module -Name Microsoft.PowerApps.Administration.PowerShell
Update-Module -Name Microsoft.PowerApps.Administration.PowerShell

在 Windows 上安装 Azure PowerShell(源管理员和目标管理员)

Azure PowerShell 模块是一个汇总模块。 安装 Azure PowerShell 模块将下载正式发布的模块,并使其 cmdlet 可供使用。 更多信息,请参阅在 Windows 上安装 Azure PowerShell

使用 Install-Module cmdlet 安装 Azure PowerShell 模块:

Install-Module -Name Az -Repository PSGallery -Force

登录 Microsoft Power Platform(源管理员和目标管理员)

登录到 Microsoft Power Platform。 此步骤允许管理员验证和访问 Power Platform 环境。

Add-PowerAppsAccount

提交迁移请求(源管理员)

要启动租户到租户的迁移,源租户的 Dynamics 365 或 Power Platform 管理员必须使用以下命令向目标租户提交请求,并提供环境名称 ID 和租户 ID。

您必须拥有 Power Platform 管理员或 Dynamics 365 管理员凭据才能完成此步骤。

TenantToTenant-SubmitMigrationRequest –EnvironmentName {EnvironmentId} -TargetTenantID {TenantID}

您可以使用以下命令查看状态和 MigrationID。

TenantToTenant-ViewMigrationRequest

备注

记录 MigrationID,该 ID 将用于进一步的迁移命令。 源租户迁移 ID 不同于目标租户迁移 ID

查看和批准迁移请求(目标管理员)

目标租户的管理员应运行以下命令来查看所有迁移请求和状态。 管理员可以查看所有迁移请求以及批准或拒绝的选项。

Add-PowerAppsAccount

TenantToTenant-ViewApprovalRequest

TenantToTenant-ManageMigrationRequest -MigrationId {MigrationId from above command to approve or deny}

请求获得批准后,目标租户的管理员可以通知源租户的管理员继续执行下一步的迁移。

生成共享访问签名(SAS)URL(源管理员)

此步骤涉及创建 SAS URL,稍后将用于上传用户映射文件。 执行以下 PowerShell 命令,用实际环境 ID 替换 EnvironmentId

GenerateResourceStorage-PowerAppEnvironment –EnvironmentName {EnvironmentId}

重要提示

确保环境处于管理模式下,且用户在环境中已分配基本用户角色。

示例输出

Code        :
Description :
Headers     :
Error       :
Errors      :
Internal    : @{sharedAccessSignature=https://dynamics.blob.core.windows.net/20240604t000000z73e18df430fe40059290dsddc25d783?sv=2018-03-28&sr=c&si=SASpolicyXXRRRX}

上传用户映射文件(源管理员)

下一步涉及将用户映射文件传输到先前建立的 SAS URL。 为此,请在 Windows PowerShell ISE 中执行以下命令,确保参数 SASUriFileToUpload 包含适当的环境信息。 此步骤对于在系统中准确上传用户映射至关重要。

备注

运行上述脚本需要安装 Azure 模块。 使用 Windows PowerShell ISE 完成以下步骤。

$SASUri ="Update the SAS Uri from previous step”
$Uri = [System.Uri] $SASUri
 
$storageAccountName = $uri.DnsSafeHost.Split(".")[0]
$container = $uri.LocalPath.Substring(1)
$sasToken = $uri.Query
 
# File to upload
# Note that the file name should be usermapping.csv (case sensitive) with comma separated values.
$fileToUpload = 'C:\filelocation\usermapping.csv'
 
# Create a storage context
$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -SasToken $sasToken
 
# Upload the file to Azure Blob Storage
Set-AzStorageBlobContent -File $fileToUpload -Container $container -Context $storageContext -Force

准备环境迁移(源管理)

以下步骤涉及执行全面验证,以确保用户映射文件中列出的每个用户都经过验证,并且当前在目标租户中处于活动状态。

可以使用源租户中的“TenantToTenant-ViewMigrationRequest”命令查看 MigrationId。

TenantToTenant-PrepareMigration 
-MigrationId {MigrationId} 
-TargetTenantId {TargetTenantId} 
-ReadOnlyUserMappingFileContainerUri {SasUri}

备注

在传递 SASUri 值时,必须提供这样的参数:https://dynamics.blob.core.windows.net/20240604t000000z73e18df430fe40059290dsddc25d783

示例输出

Code        : 202
Description : Accepted

此步骤的持续时间因用户映射文件中的用户数而异。 您可以使用下面提供的 TenantToTenant-GetStatus 命令监控此步骤的进度。

检查状态(源管理员)

TenantToTenant-GetMigrationStatus -MigrationId {MigrationId}

示例输出

  • 验证租户到租户迁移:正在运行
  • 验证租户到租户迁移:已成功
  • 验证失败,错误信息在此处的 blob 上更新:SASURI

错误以及如何解决它们

  • 如果收到以下错误提示:为租户到租户迁移提供的用户映射文件无效,请检查用户映射文件名是否正确,以及用户映射文件是否用逗号分隔值。
  • '{行号}'行中有相同的'{emailID}':确保没有任何重复条目。
  • 电子邮件格式'{emailid}'无效:确保 testuser@tenantdomain.com 的电子邮件格式正确。
  • '{linenumber}'行的目标与源 emailId 相同:确保 目标电子邮件 源电子邮件 不同。
  • 每一行必须正好有两列:'{行号}':确保每一行只有两列:来源列和目的地列。 删除任何多余的逗号(如果有)。

修复用户映射错误后,您需要使用相同的 SAS URI 重新上传用户映射文件。

下载错误报告(源管理员)

如果用户映射文件中有任何错误,可以选择下载错误报告。 要做到这一点,可以直接复制并粘贴 Tenant-To-Tenant-GetMigrationStatus 命令中提供的SasUrl,或者使用以下命令,使用上一步检查状态中的 SAS URI 以及下载错误报告的所需位置。

完成以下步骤。

  1. 使用 Windows PowerShell ISE 运行以下命令。

    Import-Module Az.Storage 
    # Define the SAS URI of the blob
    $sasUri = " Update the SAS Uri from previous step "
    # Define the path where the blob will be downloaded
    $destinationPath = "C:\Downloads\Failed\"
    # Split the SAS URI on the '?' character to separate the URL and the SAS token
    $url, $sasToken = $sasUri -split '\?', 2
    $containerName = $url.Split('/')[3]
    $storageAccountName = $url.Split('/')[2].Split('.')[0]
    $storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -SasToken $sasToken
    Get-AzStorageBlobContent -Blob "usermapping.csv" -Container $containerName -Destination $destinationPath -Context $storageContext 
    
  2. 修复用户映射文件中的问题。

  3. 使用[上传用户映射文件(源管理员)](#upload-the-user-mapping-file-(source-admin)中的步骤重新上传文件。

成功完成准备环境迁移(源管理员)后,您可以继续执行迁移环境(源管理员)步骤来迁移环境。 在接下来的 7 天内执行迁移。 如果在接下来的七天内没有完成迁移,则必须重新启动准备环境迁移(源管理员)程序。

迁移环境(源管理)

可以在源租户中使用 TenantToTenant-ViewMigrationRequest 命令查看 MigrationId

TenantToTenant-MigratePowerAppEnvironment
-MigrationId {MigrationId}
-TargetTenantId {TargetTenantId}

获取状态(源管理员)

TenantToTenant-GetMigrationStatus -EnvironmentName {EnvironmentId}

示例输出

  • 迁移环境:运行
  • 迁移环境:成功

备注

如果在运行上述命令时遇到任何问题,请提交支持请求以获得帮助。

迁移后流程

将环境移动到另一个租户后:

  • 环境 URL、组织 ID (OrgID) 和名称不会改变。
  • 源环境没有 Dataverse。
  • 映射文件中不包含的用户在迁移后不会迁移和映射。

请针对 Power Automate、Power Apps、Copilot Studio、Power Pages 完成以下步骤。

Power Automate 的迁移后流程

迁移完成后,将审查组件部分作为检查清单,调整并激活流和其他组件。 关键步骤如下:

  1. 为所有连接引用创建连接。
  2. 启动所有流,包括在父流之前启动子流。
  3. 对于任何 HTTP 触发的流,检索新 URL 并将其放置在任何调用应用或流中以刷新这些引用。

Power Apps 的迁移后流程

对于解决方案感知应用:

  1. Power Apps 中选择新环境并导航到解决方案页面。
  2. 选择导入,使用文件选择器选择从上述步骤导出的软件包。
  3. 通过检查迁移环境的解决方案内容,确认导入已成功完成。

对于非解决方案感知应用程序:

  1. 转到 Power Apps
  2. 从环境下拉列表中选择新环境。
  3. 选择应用程序
  4. 选择导入画布应用
  5. 上载应用包文件。
  6. 完成所有选择的导入选项,然后选择导入
  7. 重复上述步骤,直到所有应用全部导入。

Copilot Studio 的迁移后流程

  1. Power Apps 中选择新环境并导航到解决方案页面。
  2. 选择导入,使用文件选择器选择从上述步骤导出的软件包。
  3. 通过检查迁移环境的解决方案内容,确认导入已成功完成。

Power Pages 的迁移后流程

必须为环境中的每个网站完成以下步骤。

  1. 登录到环境。
  2. 打开管理中心
  3. 使用相同的门户类型和语言配置网站。

完成上述所有步骤和迁移后,您可以在目标租户中验证环境,稍后可以在 Power 平台管理中心中删除源环境。

常见问题解答

租户间迁移期间是否启用后台操作? 在租户间迁移期间将启用管理模式,因此后台操作不会运行。 了解更多信息,请参阅管理模式

能否迁移 Dataverse 组织的所有用户? 只有在目标环境中存在用户时,我们才能迁移 Dataverse 组织的所有用户。 例如:

user001@source.comuser001@destination.comuser002@source.comuser002@destination.com