你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

从 Azure 虚拟桌面 (经典) 自动迁移

借助迁移模块工具,可以自动将组织从 Azure 虚拟桌面 (经典) 迁移到 Azure 虚拟桌面。 本文介绍如何使用该工具。

先决条件

在使用迁移模块之前,请确保已准备好以下各项:

  • 一个 Azure 订阅,你将在其中创建新的 Azure 服务对象。

  • 必须分配有“参与者”角色才能在订阅上创建 Azure 对象,必须分配“用户访问管理员”角色才能将用户分配到应用程序组。

  • 至少远程桌面服务 (RDS) RDS 租户或要迁移的特定主机池的“参与者”权限。

  • 最新版本的 Microsoft.RdInfra.RDPowershell PowerShell 模块。

  • Az.DesktopVirtualization PowerShell 模块的最新版本。

  • Az.Resources PowerShell 模块的最新版本。

  • 在计算机上安装迁移模块。

  • PowerShell 或 PowerShell ISE 用于运行本文中看到的脚本。 Microsoft.RdInfra.RDPowershell 模块在 PowerShell Core 中不起作用。

重要

迁移仅在美国地理位置创建服务对象。 如果尝试将服务对象迁移到另一个地理位置,则不起作用。 此外,如果 Azure 虚拟桌面 (经典) 部署中的应用程序组超过 500 个,则无法迁移。 仅当重新生成环境以减少Microsoft Entra租户中的应用程序组数时,才能进行迁移。

准备 PowerShell 环境

首先,需要为迁移过程准备 PowerShell 环境。

若要准备 PowerShell 环境,请执行以下作:

  1. 在开始之前,通过运行以下 cmdlet,确保拥有最新版本的 Az.Desktop Virtualization 和 Az.Resources 模块:

    Get-Module Az.Resources
    Get-Module Az.DesktopVirtualization
    https://www.powershellgallery.com/packages/Az.DesktopVirtualization/
    https://www.powershellgallery.com/packages/Az.Resources/
    

    否则,必须通过运行以下 cmdlet 来安装和导入模块:

    Install-module Az.Resources
    Import-module Az.Resources
    Install-module Az.DesktopVirtualization
    Import-module Az.DesktopVirtualization
    
  2. 接下来,通过运行此 cmdlet 卸载当前 RDInfra PowerShell 模块:

    Uninstall-Module -Name Microsoft.RDInfra.RDPowershell -AllVersions
    
  3. 之后,使用以下 cmdlet 安装 RDPowershell 模块:

    Install-Module -Name Microsoft.RDInfra.RDPowershell -RequiredVersion 1.0.3414.0 -force
    Import-module Microsoft.RDInfra.RDPowershell
    
  4. 安装完所有内容后,运行此 cmdlet 以确保拥有正确版本的模块:

    Get-Module Microsoft.RDInfra.RDPowershell
    
  5. 现在,让我们通过运行以下 cmdlet 来安装和导入迁移模块:

    Install-Module -Name PackageManagement -Repository PSGallery -Force
    Install-Module -Name PowerShellGet -Repository PSGallery -Force
    # Then restart shell
    Install-Module -Name Microsoft.RdInfra.RDPowershell.Migration -AllowClobber
    Import-Module <Full path to the location of the migration module>\Microsoft.RdInfra.RDPowershell.Migration.psd1
    
  6. 完成后,在 PowerShell 窗口中 (经典) 登录到 Azure 虚拟桌面:

    Add-RdsAccount -DeploymentUrl https://rdbroker.wvd.microsoft.com
    
  7. 登录到 Azure 资源管理器:

    Login-AzAccount
    
  8. 如果有多个订阅,请使用此 cmdlet 选择要将资源迁移到的订阅:

    Select-AzSubscription -Subscriptionid <subID>
    
  9. 在 Azure 门户 中为所选订阅注册资源提供程序。

  10. 最后,需要注册提供程序。 可采用两种方式执行此操作:

    • 若要使用 PowerShell,请运行此 cmdlet:

      Register-AzResourceProvider -ProviderNamespace Microsoft.DesktopVirtualization
      
    • 如果想要使用Azure 门户,请打开并登录到Azure 门户,然后转到“订阅”并选择要使用的订阅的名称。 之后,转到 “资源提供程序>Microsoft.Desktop”“虚拟 ”,然后选择“ 重新注册”。 你目前不会在 UI 中看到任何更改,但 PowerShell 环境现在应该已准备好运行模块。

将 Azure 虚拟桌面 (经典) 资源迁移到 Azure 资源管理器

PowerShell 环境准备就绪后,可以开始迁移过程。

若要将 Azure 虚拟桌面 (经典) 资源迁移到 Azure 资源管理器:

  1. 在迁移之前,如果想要了解如何将现有经典资源映射到新的 Azure 资源管理器资源,请运行以下 cmdlet:

    Get-RdsHostPoolMigrationMapping
    

    使用 Get-RdsHostPoolMigrationMapping,可以创建一个 CSV 文件,用于映射资源将到达的位置。 例如,如果租户的名称为“Contoso”,并且你想要将映射文件存储在“contosouser”文件中,则会运行如下所示的 cmdlet:

    Get-RdsHostPoolMigrationMapping -Tenant Contoso -HostPool Office -Location EastUS -OutputFile 'C:\\Users\contosouser\OneDrive - Microsoft\Desktop\mapping.csv'
    
  2. 接下来,运行 Start-RdsHostPoolMigration cmdlet 以选择是迁移租户中的单个主机池还是迁移所有主机池。

    例如:

    Start-RdsHostPoolMigration -Tenant Contoso -Location WestUS
    

    如果要将资源迁移到特定的主机池,请包括主机池名称。 例如,如果要移动名为“Office”的主机池,请运行如下命令:

    Start-RdsHostPoolMigration -Tenant Contoso -HostPool Office -CopyUserAssignments $false -Location EastUS
    

    如果未提供工作区名称,模块将根据租户名称自动创建一个工作区名称。 但是,如果希望使用特定工作区,可以输入其资源 ID,如下所示:

    Start-RdsHostPoolMigration -Tenant Contoso -HostPool Office -CopyUserAssignments -Location EastUS -Workspace <Resource ID of workspacename>
    

    如果要使用特定工作区,但不知道其资源 ID,请运行此 cmdlet:

    Get-AzWvdWorkspace -WorkspaceName <workspace> -ResourceGroupName <resource group> |fl
    

    还需要为现有用户分配指定用户分配模式:

    • 使用“复制”将旧应用程序组中的所有用户分配复制到 Azure 资源管理器应用程序组。 用户将能够查看其客户端的两个版本的源。
    • 如果不想更改用户分配,请使用 None 。 稍后,可以使用 Azure 门户、PowerShell 或 API 将用户或用户组分配到应用程序组。 用户只能使用 Azure 虚拟桌面 (经典) 客户端查看源。

    每个订阅只能复制 2,000 个用户分配,因此限制将取决于订阅中已有多少个分配。 该模块根据你已有的分配数计算限制。 如果没有足够的分配进行复制,将收到一条错误消息,指出“角色分配配额不足,无法复制用户分配。 在没有 -CopyUserAssignments 开关的情况下重新运行命令进行迁移。”

  3. 运行命令后,模块最多需要 15 分钟才能创建服务对象。 如果复制或移动了任何用户分配,这将增加模块完成所有设置所需的时间。

    完成 Start-RdsHostPoolMigration cmdlet 后,应会看到以下内容:

    • 指定的租户或主机池的 Azure 服务对象。

    • 两个新资源组:

      • 名为“Tenantname”的资源组,其中包含工作区。

      • 名为“Tenantname_originalHostPoolName”的资源组,其中包含主机池和桌面应用程序组。

    • 发布到新创建的应用程序组的任何用户。

    • 虚拟机将在现有主机池和新主机池中可用,以避免在迁移过程中出现用户停机。 这允许用户连接到同一个用户会话。

    由于这些新的 Azure 服务对象是 Azure 资源管理器对象,因此该模块无法设置基于角色访问控制 (RBAC) 权限或诊断设置。 因此,需要手动更新这些对象的 RBAC 权限和设置。

    模块验证初始用户连接后,还可以根据需要将应用程序组发布到更多用户或用户组。

    注意

    迁移后,如果在向用户分配权限后将应用程序组移动到其他资源组,则会删除所有 RBAC 角色。 需要重新为用户重新分配 RBAC 权限。

  4. 如果要删除所有 Azure 虚拟桌面 (经典) 服务对象,请运行 Complete-RdsHostPoolMigration 以完成迁移过程。 此 cmdlet 将删除所有 Azure 虚拟桌面 (经典) 对象,仅保留新的 Azure 对象。 用户只能在其客户端上查看新创建的应用程序组的源。 此命令完成后,可以安全地删除 Azure 虚拟桌面 (经典) 租户以完成该过程。

    例如:

    Complete-RdsHostPoolMigration -Tenant Contoso -Location EastUS
    

    如果要完成特定的主机池,可以在 cmdlet 中包含主机池名称。 例如,如果要完成名为“Office”的主机池,请使用如下所示的命令:

    Complete-RdsHostPoolMigration -Tenant Contoso -HostPool Office -Location EastUS
    

    这将删除 Azure 虚拟桌面 (经典) 创建的所有服务对象。 只剩下新的 Azure 对象,用户只能查看其客户端上新创建的应用程序组的源。 完成迁移后,需要显式删除 Azure 虚拟桌面中的租户 (经典) 。

  5. 如果已改变迁移主意,并且想要还原该过程,请运行 Revert-RdsHostPoolMigration cmdlet。

    例如:

    Revert-RdsHostPoolMigration -Tenant Contoso -Location EastUS
    

    如果要还原特定的主机池,可以在 命令中包含主机池名称。 例如,如果要还原名为“Office”的主机池,请输入如下所示的内容:

    Revert-RdsHostPoolMigration -Tenant Contoso -HostPool Office -Location EastUS
    

    此 cmdlet 将删除所有新创建的 Azure 服务对象。 用户只会在其客户端中看到 Azure 虚拟桌面 (经典) 对象的源。

    但是,cmdlet 不会删除模块创建的工作区或其关联的资源组。 需要手动删除这些项目才能删除它们。

  6. 如果不想删除 Azure 虚拟桌面 (经典) 服务对象,但想要测试迁移,可以运行 Set-RdsHostPoolHidden

    例如:

    Set-RdsHostPoolHidden -Tenant Contoso -Hostpool Office -Hidden $true -Location WestUS
    

    将状态设置为“true”将隐藏 Azure 虚拟桌面 (经典) 资源。 将其设置为“false”将向用户显示资源。

    -Hostpool 参数是可选的。 如果要隐藏特定的 Azure 虚拟桌面 (经典) 主机池,则可以使用此参数。

    此 cmdlet 将隐藏 Azure 虚拟桌面 (经典) 用户源和服务对象,而不是删除它们。 但是,这通常仅用于测试,不计为已完成的迁移。 若要完成迁移,需要运行 Complete-RdsHostPoolMigration 命令。 否则,请运行 Revert-RdsHostPoolMigration 还原部署。

自动迁移疑难解答

本部分介绍如何解决迁移模块中遇到的常见问题。

我无法访问租户

首先,请尝试以下两项作:

  • 请确保管理员帐户具有访问租户所需的权限。
  • 尝试在租户上运行 Get-RdsTenant

如果这两项作奏效,请尝试运行 Set-RdsMigrationContext cmdlet,为迁移设置 RDS 上下文和 ADAL 上下文:

  1. 通过运行 Add-RdsAccount cmdlet 创建 RDS 上下文。

  2. 在全局变量 $rdMgmtContext中找到 RDS 上下文。

  3. 在全局变量 $AdalContext中找到 ADAL 上下文。

  4. 使用以下格式找到的变量运行 Set-RdsMigrationContext

    Set-RdsMigrationContext -RdsContext <rdscontext> -AdalContext <adalcontext>
    

后续步骤

若要了解如何手动迁移部署,请参阅 从 Azure 虚拟桌面手动迁移 (经典)

迁移后,请查看 我们的教程,了解 Azure 虚拟桌面的工作原理。 在 扩展现有主机池自定义 RDP 属性中了解高级管理功能。

若要详细了解服务对象,检查 Azure 虚拟桌面环境