将 MSIX 包从 MSIX 应用附加迁移到应用附加

应用附加通过 MSIX 应用附加改进管理和用户体验。 如果使用 MSIX 应用附加,则可以使用 PowerShell 脚本将 MSIX 包迁移到应用附加。

迁移脚本可执行以下操作:

  • 创建新的应用附加包对象,并在必要时可以删除原始 MSIX 包对象。

  • 从与主机池和 MSIX 包关联的应用程序组复制权限。

  • 复制主机池和 MSIX 包的位置和资源组。

  • 记录迁移活动。

先决条件

若要使用迁移脚本,需要:

  • 配置为验证环境的主机池,至少有一个 MSIX 包随 MSIX 应用附加一起添加。

  • 在主机池上分配的桌面虚拟化参与者 Azure 基于角色的访问控制 (RBAC) 角色的 Azure 帐户。

  • 使用 PowerShell 的本地设备。 请确保已安装最新版本的 Az PowerShellMicrosoft Graph PowerShell SDK。 具体来说,需要以下模块:

    • Az.DesktopVirtualization
    • Az.Accounts
    • Az.Resources
    • Microsoft.Graph.Authentication

参数

以下是可用于迁移脚本的参数:

参数 说明
MsixPackage 要迁移到应用附加对象的 MSIX 包对象。 此值可以通过管道传入。
PermissionSource 从何处获取新应用附加对象的权限。 默认为未授予任何权限。 选项包括:
  • DAG:与主机池和 MSIX 包关联的桌面应用程序组
  • RAG:与主机池和 MSIX 包关联的一个或多个 RemoteApp 应用程序组
这两个选项都向所有用户和组授予了特定于应用程序组的任何权限。
HostPoolsForNewPackage 要与新应用附加对象关联的主机池的资源 ID。 默认为无主机池。 主机池必须与它们关联的应用附加包位于同一位置。
TargetResourceGroupName 用于存储新应用附加对象的资源组。 默认为 MSIX 包关联的主机池资源组。
Location 要在其中创建新应用附加对象的 Azure 区域。 默认为 MSIX 包关联的主机池位置。 应用附加包必须与它们关联的主机池位于同一位置。
DeleteOrigin 迁移后删除源 MSIX 包。
IsActive 启用新的应用附加对象。
DeactivateOrigin 迁移后禁用源 MSIX 包对象。
PassThru 传递新的应用附加对象。 Passthru 返回所创建的包的对象。 如果要检查该值或将其传递给另一个 PowerShell 命令,请使用此值。
LogInJSON 以 JSON 格式写入日志文件。
LogFilePath 日志文件的路径默认为临时文件夹中的 MsixMigration[Timestamp].log,例如 C:\Users\%USERNAME%\AppData\Local\Temp\MsixMigration<DATETIME>.log。 运行脚本时,日志记录的路径将写入控制台。

下载并运行迁移脚本

下面介绍如何将 MSIX 包从 MSIX 应用附加迁移到应用附加。

重要

在以下示例中,需要将 <placeholder> 值更改为自己的值。

  1. 在本地设备上打开 PowerShell 提示符。

  2. 通过运行以下命令下载 PowerShell 脚本 Migrate-MsixPackagesToAppAttach.ps1 并取消阻止它:

    $url = "https://raw.githubusercontent.com/Azure/RDS-Templates/master/msix-app-attach/MigrationScript/Migrate-MsixPackagesToAppAttach.ps1"
    $filename = $url.Split('/')[-1]
    
    Invoke-WebRequest -Uri $url -OutFile $filename | Unblock-File
    
  3. 运行以下命令来导入所需的模块:

    Import-Module Az.DesktopVirtualization
    Import-Module Az.Accounts
    Import-Module Az.Resources
    Import-Module Microsoft.Graph.Authentication
    
  4. 通过运行以下命令并按照提示登录到 Azure 帐户,连接到 Azure:

    Connect-AzAccount -AzureEnvironmentName AzureChinaCloud
    
  5. 通过运行以下命令连接到 Microsoft Graph:

    Connect-MgGraph -Scopes "Group.Read.All"
    

以下小节包含有关如何使用迁移脚本的一些示例。 有关所有可用参数和每个参数的说明,请参阅参数部分。

提示

如果未将任何参数传递给迁移脚本,则它具有以下默认行为:

  • 不会向新应用附加包授予任何权限。
  • 新的应用附加包不与任何主机池关联,并且处于非活动状态。
  • 新的应用附加包在主机池所在的资源组和位置中创建。
  • 原始 MSIX 包仍然处于活动状态,不会禁用或删除。
  • 日志信息写入默认文件路径。

将添加到主机池和应用程序组的特定 MSIX 包迁移

下面是将添加到主机池的特定 MSIX 包从 MSIX 应用附加迁移到应用附加的示例。 本示例:

  • 将 MSIX 包迁移到与主机池相同的资源组和位置。
  • 将应用附加中的 MSIX 包分配到与 RemoteApp 应用程序组源相同的主机池和相同的用户。
  • 保留 MSIX 应用附加中现有的 MSIX 包配置主机池上为活动。 如果要立即禁用 MSIX 包,请使用 -DeactivateOrigin 参数。
  • 在应用附加中新的 MSIX 包配置设置为非活动。 如果要立即禁用 MSIX 包,请使用 -IsActive 参数。
  • 将日志信息写入默认文件路径和格式。
  1. 在同一 PowerShell 提示下,通过运行以下命令获取添加到主机池的 MSIX 包的列表:

    $parameters = @{
        HostPoolName = '<HostPoolName>'
        ResourceGroupName = '<ResourceGroupName>'
    }
    
    Get-AzWvdMsixPackage @parameters | Select-Object DisplayName, Name
    

    输出与以下输出类似:

    DisplayName Name
    ----------- ----
    MyApp       hp01/MyApp_1.0.0.0_neutral__abcdef123ghij
    
  2. 查找要迁移的 MSIX 包,并使用上一输出中 Name 参数的值:

    $parameters = @{
        HostPoolName = '<HostPoolName>'
        ResourceGroupName = '<ResourceGroupName>'
    }
    
    $msixPackage = Get-AzWvdMsixPackage @parameters | ? Name -Match '<MSIXPackageName>'
    $hostPoolId = (Get-AzWvdHostPool @parameters).Id
    
  3. 运行以下命令来迁移 MSIX 包:

    $parameters = @{
        PermissionSource = 'RAG'
        HostPoolsForNewPackage = $hostPoolId
        PassThru = $true
    }
    
    $msixPackage | .\Migrate-MsixPackagesToAppAttach.ps1 @parameters
    

迁移添加到主机池的所有 MSIX 包

下面是将添加到主机池的所有 MSIX 包从 MSIX 应用附加迁移到应用附加的示例。 本示例:

  • 将 MSIX 包迁移到同一资源组和位置。
  • 将新的应用附加包添加到同一主机池。
  • 将所有应用附加包设置为活动。
  • 将所有 MSIX 包设置为非活动。
  • 从关联的桌面应用程序组复制权限。
  • 以 JSON 格式将日志信息写入 C:\MsixToAppAttach.log 的自定义文件路径。
  1. 在同一 PowerShell 提示下,通过运行以下命令将所有 MSIX 包添加到主机池,并将它们存储在变量中:

    $parameters = @{
        HostPoolName = '<HostPoolName>'
        ResourceGroupName = '<ResourceGroupName>'
    }
    
    $msixPackages = Get-AzWvdMsixPackage @parameters
    $hostPoolId = (Get-AzWvdHostPool @parameters).Id   
    
  2. 运行以下命令来迁移 MSIX 包:

    $logFilePath = "C:\Temp\MsixToAppAttach.log"
    
    $parameters = @{
        IsActive = $true
        DeactivateOrigin = $true
        PermissionSource = 'DAG'
        HostPoolsForNewPackage = $hostPoolId
        PassThru = $true
        LogInJSON = $true
        LogFilePath = $LogFilePath
    }
    
    $msixPackages | .\Migrate-MsixPackagesToAppAttach.ps1 @parameters