在 Azure 虚拟桌面中添加和管理应用附加和 MSIX 应用附加应用程序
本文内容
提示
Azure 虚拟桌面的新版应用附加可供使用。 选择本文顶部的按钮,在应用附加和 MSIX 应用附加之间进行选择,以查看相关文档 。
应用附加可用于将应用程序从应用程序包中动态附加到 Azure 虚拟桌面中的用户会话。 应用程序不会本地安装在会话主机或映像上,因此可以为会话主机创建较少的自定义映像,并降低组织的运营开销和成本。 通过应用附加交付应用程序还可以更好地控制用户可在远程会话中访问的应用程序。
MSIX 应用附加可用于将应用程序从应用程序包中动态附加到 Azure 虚拟桌面中的用户会话。 应用程序不会本地安装在会话主机或映像上,因此可以更轻松地为会话主机创建自定义映像,并降低组织的运营开销和成本。 通过 MSIX 应用附加交付应用程序还可以更好地控制用户可在远程会话中访问的应用程序。
本文介绍如何使用 Azure 门户和 Azure PowerShell 在 Azure 虚拟桌面中通过应用附加来添加和管理应用程序。 无法使用 Azure CLI 来添加或管理应用附加应用程序。 在开始之前,请确保阅读 Azure 虚拟桌面中的应用附加和 MSIX 应用附加 的概述。
本文介绍如何使用 Azure 门户和 Azure PowerShell 在 Azure 虚拟桌面中通过 MSIX 应用附加来添加和管理 MSIX 包。 无法使用 Azure CLI 来添加或管理 MSIX 应用附加应用程序。 在开始之前,请确保阅读 Azure 虚拟桌面中的应用附加和 MSIX 应用附加 的概述。
重要
必须选择是对主机池使用应用附加还是 MSIX 应用附加。 不能将这两个版本用于同一主机池。
先决条件
若要在 Azure 虚拟桌面中使用应用附加,需要以下内容:
若要在 Azure 虚拟桌面中使用 MSIX 应用附加,需要满足以下先决条件:
会话主机需要加入 Microsoft Entra ID 或 Active Directory 域服务 (AD DS) 域。
会话主机需要加入 Active Directory 域服务 (AD DS) 域。 不支持 Microsoft Entra ID。
用户帐户需要是混合帐户(在 AD DS 中创建并同步到 Microsoft Entra ID)。 组可以是混合组,也可以是 Microsoft Entra ID 组。
与会话主机位于同一 Azure 区域中的 SMB 文件共享。 主机池中所有会话主机的计算机帐户都必须具有读取访问权限 。 此文件共享用于存储应用程序映像。 有关文件共享的要求的详细信息,请参阅文件共享 。
若要在会话主机加入 Microsoft Entra ID 时使用 Azure 文件存储,需要将读者和数据访问 Azure 基于角色的访问控制 (RBAC) 角色分配给“Azure 虚拟桌面”和“Azure 虚拟桌面 ARM 提供程序”服务主体。 若要了解如何将 Azure RBAC 角色分配给 Azure 虚拟桌面服务主体,请参阅将 RBAC 角色分配给 Azure 虚拟桌面服务主体 。
与会话主机位于同一 Azure 区域中的 SMB 文件共享。 主机池中所有会话主机的计算机帐户都必须具有读取访问权限 。 此文件共享用于存储应用程序映像。 有关文件共享的要求的详细信息,请参阅文件共享 。
从应用程序包创建并存储在文件共享上的 MSIX 或 Appx 磁盘映像。 有关详细信息,请参阅创建映像 ,也可以在其中下载预生成的 MSIX 包进行测试。
从应用程序包创建并存储在文件共享上的 MSIX 映像。 有关详细信息,请参阅创建映像 ,也可以在其中下载预生成的 MSIX 包进行测试。
需要使用版本 4.2.1 的 Az.DesktopVirtualization PowerShell 模块,其中包含支持应用附加的 cmdlet 。 可以从 PowerShell 库 下载并安装 Az.DesktopVirtualization PowerShell 模块。
重要
所有 MSIX 应用程序包都包含一个证书。 你负责确保证书在环境中受信任。 相应的信任链支持自签名证书。
添加应用程序
若要将 MSIX 或 Appx 映像中的应用程序作为应用附加包添加到 Azure 虚拟桌面,请选择适合你的方案的相关选项卡,并按照步骤操作。
下面介绍如何使用 Azure 门户将 MSIX 或 Appx 映像添加为应用附加包:
登录 Azure 门户 。
在搜索栏中,键入“Azure 虚拟桌面 ”,然后选择匹配的服务条目以转到 Azure 虚拟桌面概述。
选择“应用附加”,然后选择“+ 创建” 。
在“基本信息”选项卡上,完成以下信息:
参数
说明
订阅
从下拉列表中选择要将 MSIX 或 Appx 映像添加到其中的订阅。
资源组
选择现有资源组或选择“新建 ”并输入名称。
主机池
从下拉列表中选择一个现有主机池。
位置
为应用附加包选择 Azure 区域。
完成此选项卡后,请选择“下一步”。
在“映像路径”选项卡上,填写以下信息 :
参数
说明
映像路径
如果映像存储在 Azure 文件存储中,请选择“从存储帐户中选择”,或者选择“输入 UNC”以指定 UNC 路径 。 后续字段取决于所选的选项。
从存储帐户中选择
存储帐户
选择映像所在的存储帐户。
文件共享
选择“选择文件”,然后浏览到映像所在的文件共享和目录 。 选中要添加的映像旁边的框,例如 MyApp.cim
,然后选择“选择” 。
MSIX 包
从映像中选择 MSIX 或 Appx 包。
输入 UNC
UNC
输入映像文件的 UNC 路径。
MSIX 包
从映像中选择 MSIX 或 Appx 包。
任一选项
显示名称
为应用程序输入一个易记名称。
版本
检查是否显示了预期的版本号。
登记类型
选择要使用的注册类型 。
State
选择包的初始状态 。
失败时的运行状况检查状态
如果包无法在会话主机上暂存,请选择包的状态。 针对会话主机运行状况检查状态 的 AppAttachHealthCheck 报告此状态。
完成此选项卡后,请选择“下一步”。
提示
填写此选项卡后,可以继续选择将应用程序分配给主机池、用户和组。 或者,如果要单独配置分配,请选择“查看 + 创建” ,然后转到分配应用附加包 。
可选:在“分配”选项卡上,填写以下信息 :
对于“主机池”,选择要向其分配应用程序的主机池 。 如果已将 MSIX 应用附加用于主机池,则无法选择该主机池,因为无法将两个版本的应用附加用于同一主机池 。
选择“添加用户或用户组”,然后搜索并选择要向其分配应用程序的用户或组 。 完成后,选择“选择” 。
查看添加的分配,然后选择“下一步” 。
可选:在“标记”选项卡上,可以输入所需的任何名称/值对,然后选择“查看 + 创建” 。
在“查看 + 创建”选项卡上,确保验证通过并查看在部署期间使用的信息,然后选择“创建”以添加应用程序 。
下面介绍如何使用 Az.DesktopVirtualization PowerShell 模块将 MSIX 或 Appx 映像添加为应用附加包。 请务必将 <placeholder>
值更改为你自己的值。
在本地设备上运行 PowerShell。
在预览期间,通过运行以下命令检查是否有可用的 PowerShell cmdlet:
Import-Module Az.DesktopVirtualization
Get-Command -Module Az.DesktopVirtualization -Noun "*AppAttach*"
输出应类似于以下输出:
CommandType Name Version Source
----------- ---- ------- ------
Function Get-AzWvdAppAttachPackage 4.2.1 Az.DesktopVirtualization
Function Import-AzWvdAppAttachPackageInfo 4.2.1 Az.DesktopVirtualization
Function New-AzWvdAppAttachPackage 4.2.1 Az.DesktopVirtualization
Function Remove-AzWvdAppAttachPackage 4.2.1 Az.DesktopVirtualization
Function Update-AzWvdAppAttachPackage 4.2.1 Az.DesktopVirtualization
运行以下命令,获取要添加的映像的属性并将其存储在变量中。 需要指定主机池,但它可以是会话主机有权访问文件共享的任何主机池。
# Get the properties of the MSIX or Appx image
$parameters = @{
HostPoolName = '<HostPoolName>'
ResourceGroupName = '<ResourceGroupName>'
Path = '<UNCPathToImageFile>'
}
$app = Import-AzWvdAppAttachPackageInfo @parameters
运行以下命令,检查应用程序属性中是否只有一个对象:
$app | FL *
可选 :如果输出中有多个对象,例如同一应用程序的 x64 和 x86 版本,则可以通过运行以下命令,使用参数 PackageFullName
指定要添加的应用程序:
# Specify the package full name
$packageFullName = '<PackageFullName>'
# Get the properties of the application
$parameters = @{
HostPoolName = '<HostPoolName>'
ResourceGroupName = '<ResourceGroupName>'
Path = '<UNCPathToImageFile>'
}
$app = Import-AzWvdAppAttachPackageInfo @parameters | ? ImagePackageFullName -like *$packageFullName*
运行以下命令,将映像添加为应用附加包。 在此示例中,应用程序状态 标记为“活动”,应用程序注册 设置为“按需”,失败时的会话主机运行状况检查状态 设置为“NeedsAssistance” :
$parameters = @{
Name = '<AppName>'
ResourceGroupName = '<ResourceGroupName>'
Location = '<AzureRegion>'
FailHealthCheckOnStagingFailure = 'NeedsAssistance'
ImageIsRegularRegistration = $false
ImageDisplayName = '<AppDisplayName>'
ImageIsActive = $true
}
New-AzWvdAppAttachPackage -AppAttachPackage $app @parameters
成功添加包时,没有输出。
可以通过运行以下命令来验证是否已添加包:
$parameters = @{
Name = '<AppName>'
ResourceGroupName = '<ResourceGroupName>'
}
Get-AzWvdAppAttachPackage @parameters | FL Name, ImagePackageApplication, ImagePackageFamilyName, ImagePath, ImageVersion, ImageIsActive, ImageIsRegularRegistration, SystemDataCreatedAt
输出应如以下示例所示:
Name : My App
ImagePackageApplication : {MyApp}
ImagePackageFamilyName : MyApp_abcdef123ghij
ImagePath : \\fileshare\Apps\MyApp\MyApp.cim
ImageVersion : 1.0.0.0
ImageIsActive : True
ImageIsRegularRegistration : True
SystemDataCreatedAt : 7/31/2023 3:03:43 PM
分配应用附加包
需要将应用附加包分配给主机池以及组和用户。 选择你的方案对应的相关选项卡并按照步骤操作。
注意
用户帐户需要是混合帐户(在 AD DS 中创建并同步到 Azure AD),但组不需要。
下面介绍如何使用 Azure 门户将应用程序包分配给主机池、用户和组:
主机池
从 Azure 虚拟桌面概述中,选择“应用附加”,然后选择要分配的应用附加包的名称 。
在“管理”部分中,选择“主机池” :
选择“+ 分配”,然后从下拉列表中选择一个或多个主机池 。 确保主机池中所有会话主机的计算机帐户都必须具有读取访问权限 。
选择 添加 。
组和用户
从 Azure 虚拟桌面概述中,选择“应用附加”,然后选择要分配的应用附加包的名称 。
在“管理”部分中,选择“用户” :
选择“+添加”,然后从列表中选择一个或多个组和/或用户 。
选择“选择” 。
下面介绍如何使用 Az.DesktopVirtualization PowerShell 模块将应用程序包分配给主机池以及组和用户。
主机池
重要
每次指定的主机池 ID 都将覆盖任何现有分配。 如果要在主机池的现有列表中添加或移除主机池,需要指定要向其分配应用程序的所有主机池。
在同一 PowerShell 会话中,通过运行以下命令获取要向其分配应用程序的主机池的资源 ID 并将其添加到数组:
# Add a comma-separated list of host pools names
$hostPoolNames = "<HostPoolName1>","<HostPoolName2>"
# Create an array and add the resource ID for each host pool
$hostPoolIds = @()
foreach ($hostPoolName in $HostPoolNames) {
$hostPoolIds += (Get-AzWvdHostPool | ? Name -eq $hostPoolName).Id
}
获得主机池的资源 ID 后,可以通过运行以下命令将应用程序包分配给它们:
$parameters = @{
Name = '<AppName>'
ResourceGroupName = '<ResourceGroupName>'
Location = '<AzureRegion>'
HostPoolReference = $hostPoolIds
}
Update-AzWvdAppAttachPackage @parameters
若要从所有主机池取消分配应用程序包,可以通过运行以下命令传递主机池的空数组:
$parameters = @{
Name = '<AppName>'
ResourceGroupName = '<ResourceGroupName>'
Location = '<AzureRegion>'
HostPoolReference = @()
}
Update-AzWvdAppAttachPackage @parameters
组和用户
下面介绍如何使用 Az.DesktopVirtualization PowerShell 模块将应用程序分配给组和用户。
获取要在应用程序中添加或移除的组或用户的对象 ID,并使用以下示例之一将其添加到数组中。 建议将应用程序分配给组。
运行以下命令,获取组的对象 ID,并将其添加到数组。 此示例使用组显示名称:
# Add a comma-separated list of group names
$groups = "Group1","Group2"
# Connect to Microsoft Graph
Connect-MgGraph -Scopes 'Group.Read.All'
# Create an array and add the ID for each group
$Ids = @()
foreach ($group in $groups) {
$Ids += (Get-MgGroup | ? DisplayName -eq $group).Id
}
运行以下命令,获取用户的对象 ID,并将其添加到数组。 此示例使用用户主体名称 (UPN):
# Add a comma-separated list of user principal names
$users = "user1@contoso.com","user2@contoso.com"
# Connect to Azure AD
Connect-MgGraph -Scopes 'User.Read.All'
# Create an array and add the ID for each user
$userIds = @()
foreach ($user in $users) {
$userIds += (Get-MgUser | ? UserPrincipalName -eq $user).Id
}
拥有用户或组的对象 ID 后,可以使用以下示例之一将其添加到应用程序或将其从应用程序中移除,从而分配桌面虚拟化用户 RBAC 角色。
若要将组或用户添加到应用程序,请运行以下命令:
$parameters = @{
Name = '<AppName>'
ResourceGroupName = '<ResourceGroupName>'
}
$appAttachPackage = Get-AzWvdAppAttachPackage @parameters
foreach ($userId in $userIds) {
New-AzRoleAssignment -ObjectId $userId -RoleDefinitionName "Desktop Virtualization User" -Scope $appAttachPackage.Id
}
若要从应用程序中移除组或用户,请运行以下命令:
$parameters = @{
Name = '<AppName>'
ResourceGroupName = '<ResourceGroupName>'
}
$appAttachPackage = Get-AzWvdAppAttachPackage @parameters
foreach ($userId in $userIds) {
Remove-AzRoleAssignment -ObjectId $userId -RoleDefinitionName "Desktop Virtualization User" -Scope $appAttachPackage.Id
}
更改注册类型和状态
可以通过更改 MSIX 和 Appx 包的注册类型 和状态 来管理 MSIX 和 Appx 包。 选择你的方案对应的相关选项卡并按照步骤操作。
下面介绍如何使用 Azure 门户更改包的注册类型和状态:
从 Azure 虚拟桌面概述中,选择“应用附加” 。 应会在主机池中看到所有现有包的列表。
选择要更改的包的名称。
若要更改注册类型,请选择“按需”或“在登录时注册”,然后选择“保存” 。
若要更改状态,请选择“非活动”或“活动”,然后选择“保存” 。
下面介绍如何使用 Az.DesktopVirtualization PowerShell 模块更改包的注册类型和状态。
在同一 PowerShell 会话中,可以通过运行以下命令来更改注册类型和状态:
通过运行以下命令更改注册类型。 将 IsRegularRegistration
设置为 $true
用于在登录时注册 或 $false
用于按需 。
$parameters = @{
Name = '<Name>'
ResourceGroupName = '<ResourceGroupName>'
Location = '<AzureRegion>'
IsRegularRegistration = $true
}
Update-AzWvdAppAttachPackage @parameters
通过运行以下命令更改状态。 将 IsActive
设置为 以使用“活动”,或设置为 $false
以使用“非活动”$true
。
$parameters = @{
Name = '<Name>'
ResourceGroupName = '<ResourceGroupName>'
Location = '<AzureRegion>'
IsActive = $true
}
Update-AzWvdAppAttachPackage @parameters
使用 RemoteApp 应用程序组发布 MSIX 或 Appx 应用程序
可以通过使用 RemoteApp 应用程序组发布 MSIX 和 Appx 应用程序来向用户提供这些应用程序。 使用应用附加时,无需将应用程序添加到桌面应用程序组,因为只需分配应用附加包 。 必须将要发布的应用程序分配给主机池。
下面介绍如何使用 Azure 门户将应用程序从本文添加的包中添加到 RemoteApp 应用程序组:
从 Azure 虚拟桌面概述中,选择“应用程序组” ,然后选择要向其添加应用程序的 RemoteApp 应用程序组。
选择“应用程序” ,然后选择“+ 添加” 。 确保应用程序组分配到的主机池中至少有一台会话主机已开机。
在“基本信息”选项卡上,完成以下信息:
参数
值/说明
应用程序源
从下拉列表中选择“应用附加” 。 如果要从“开始”菜单或通过指定文件路径添加应用程序,请参阅 使用 RemoteApp 发布应用程序 。
包
从下拉列表中选择可用于主机池的包。 区域包来自“应用附加” 。
应用程序
从下拉列表中选择一个应用程序。
申请标识符
输入应用程序的唯一标识符。
显示名称
为用户输入一个易记应用程序名称。
说明
输入应用程序描述。
完成此选项卡后,请选择“下一步”。
在“图标”选项卡上,选择“默认”以使用应用程序的默认图标,或选择“文件路径”以使用自定义图标 。 对于“文件路径”,请选择以下选项之一:
浏览 Azure 文件存储 :可使用 Azure 文件共享中的图标。 先选择“选择存储帐户” ,接着选择包含图标文件的存储帐户,然后选择“选择图标文件” 。 浏览到图标所在的文件共享和目录,选中要添加的图标(例如 MyApp.ico
)旁边的框,然后选择“选择” 。 也可以使用 .png
文件。 对于“图标索引” ,请指定要使用的图标的索引号。 此数字通常为 0 。
UNC 文件路径 :可使用文件共享中的图标。 对于“图标路径” ,请输入图标文件的 UNC 路径,例如 \\MyFileShare\MyApp.ico
。 也可以使用 .png
文件。 对于“图标索引” ,请指定要使用的图标的索引号。 此数字通常为 0 。
完成此选项卡后,选择“查看 + 添加” 。
在“查看 + 添加”选项卡上,确保验证通过并查看用于添加应用程序的信息,然后选择“添加”以将应用程序添加到 RemoteApp 应用程序组中。
下面介绍如何使用 Az.DesktopVirtualization PowerShell 模块将应用程序从本文添加的包中添加到 RemoteApp 应用程序组。
在同一 PowerShell 会话中,如果包中有多个应用程序,则需要运行以下命令获取要从包中添加的应用程序的应用程序 ID:
Write-Host "These are the application IDs available in the package. Many packages only contain one application." -ForegroundColor Yellow
$app.ImagePackageApplication.AppId
记下要发布的应用程序 ID(例如 App
),然后运行以下命令,以将应用程序添加到 RemoteApp 应用程序组:
$parameters = @{
Name = '<ApplicationName>'
ApplicationType = 'MsixApplication'
MsixPackageFamilyName = $app.ImagePackageFamilyName
MsixPackageApplicationId = '<ApplicationID>'
GroupName = '<ApplicationGroupName>'
ResourceGroupName = '<ResourceGroupName>'
CommandLineSetting = 'DoNotAllow'
}
New-AzWvdApplication @parameters
通过运行以下命令验证应用程序组中的应用程序列表:
$parameters = @{
GroupName = '<ApplicationGroupName>'
ResourceGroupName = '<ResourceGroupName>'
}
Get-AzWvdApplication @parameters
更新现有包
可以通过提供包含更新的应用程序的新映像来更新现有包。 有关详细信息,请参阅新版本的应用程序 。
若要就地更新现有包,请选择适合你的方案的相关选项卡并按照步骤操作。
下面介绍如何使用 Azure 门户更新现有包:
从 Azure 虚拟桌面概述中,选择“应用附加” 。 应会看到所有现有包的列表。
选择要更新的包,然后从概述中选择“更新” 。
输入更新后的包的信息:
“订阅”和“资源组”预填充了当前包的值 。
选择要更新其包的主机池 。
从“从存储帐户中选择”中选择映像路径或选择“输入 UNC” 。 后续字段取决于所选的选项。
对于“从存储帐户中选择”,请选择包含更新后的映像的存储帐户 。 选择“选择文件”,然后浏览到映像所在的文件共享和目录 。 选中要添加的映像旁边的框,例如 MyApp.cim
,然后选择“选择” 。
对于“输入 UNC”,请输入映像文件的 UNC 路径 。
对于“MSIX 包” ,请从映像中选择 MSIX 或应用包。
完成这些字段后,选择“更新” 。
下面介绍如何使用 Az.DesktopVirtualization PowerShell 模块更新现有包。
在同一 PowerShell 会话中,通过运行以下命令获取更新的应用程序的属性并将其存储在变量中:
# Get the properties of the application
$parameters = @{
HostPoolName = '<HostPoolName>'
ResourceGroupName = '<ResourceGroupName>'
Path = '<UNCPathToImageFile>'
}
$app = Import-AzWvdAppAttachPackageInfo @parameters
运行以下命令,检查应用程序属性中是否只有一个对象:
$app | FL *
如果输出中有多个对象,例如同一应用程序的 x64 和 x86 版本,则可以通过运行以下命令,使用参数 PackageFullName
来指定要添加的应用程序:
# Specify the package full name
$packageFullName = '<PackageFullName>'
# Get the properties of the application
$parameters = @{
HostPoolName = '<HostPoolName>'
ResourceGroupName = '<ResourceGroupName>'
Path = '<UNCPathToImageFile>'
}
$app = Import-AzWvdAppAttachPackageInfo @parameters | ? ImagePackageFullName -like *$packageFullName*
通过运行以下命令更新现有包。 新的磁盘映像会取代现有磁盘映像,但保留现有分配。 在用户停止使用之前,请勿删除现有映像。
$parameters = @{
Name = '<PackageName>'
ResourceGroupName = '<ResourceGroupName>'
}
Update-AzWvdAppAttachPackage -AppAttachPackage $app @parameters
移除应用附加包
可以移除不再需要的应用附加包。 无需首先取消分配主机池或用户和组。 选择你的方案对应的相关选项卡并按照步骤操作。
提示
也可以从应用程序组中移除作为 RemoteApp 发布的 MSIX 软件包中的应用程序,方法与其他应用程序类型相同。 有关详细信息,请参阅移除应用程序 。
下面介绍如何使用 Azure 门户移除应用附加包:
从 Azure 虚拟桌面概述中,选择“应用附加” 。 应会看到所有现有包的列表。
选中要移除的包名称旁边的框,然后选择“移除” 。 该包也会从其分配到的任何主机池中移除。
下面介绍如何使用 Az.DesktopVirtualization PowerShell 模块移除应用附加包。
在同一 PowerShell 会话中,运行以下命令以移除包含应用程序的包:
$parameters = @{
Name = '<PackageName>'
ResourceGroupName = '<ResourceGroupName>'
}
Remove-AzWvdAppAttachPackage @parameters
将 MSIX 映像添加到主机池
若要将 MSIX 映像添加到主机池,请选择适合你的方案的相关选项卡并按照步骤操作。
下面介绍如何使用 Azure 门户添加 MSIX 映像:
登录 Azure 门户 。
在搜索栏中,键入“Azure 虚拟桌面 ”,然后选择匹配的服务条目以转到 Azure 虚拟桌面概述。
选择主机池,然后选择要向其中添加 MSIX 映像的主机池的名称 。
从主机池概述中选择“MSIX 包”,然后选择“+ 添加” 。
对于“MSIX 映像路径” ,请输入指向文件共享上的 MSIX 映像的有效 UNC 路径,例如 \\fileshare\Apps\MyApp\MyApp.cim
;然后选择“添加” ,这会检查路径是否有效。
验证路径后,会显示更多字段。 填写以下信息:
参数
说明
MSIX 包
从下拉菜单中选择相关的 MSIX 包名称。
包应用程序
这会显示应用,并且不可配置 。
显示名称
为包输入一个易记名称。
版本
检查是否显示了预期的版本号。
登记类型
选择要使用的注册类型 。
State
选择包的初始状态 。
完成这些字段后,选择“添加” 。
下面介绍如何使用 Az.DesktopVirtualization PowerShell 模块添加 MSIX 包。 请务必将 <placeholder>
值更改为你自己的值。
在本地设备上运行 PowerShell。
运行以下命令,获取要添加的 MSIX 映像中的应用程序的属性,并将其存储在变量中:
# Get the properties of the MSIX image
$parameters = @{
HostPoolName = '<HostPoolName>'
ResourceGroupName = '<ResourceGroupName>'
Uri = '<UNCPathToImageFile>'
}
$app = Expand-AzWvdMsixImage @parameters
输出应如以下示例所示:
Name
----
hp01/expandmsiximage
运行以下命令,检查应用程序属性中是否只有一个对象:
$app | FL *
如果输出中有多个对象,例如同一应用程序的 x64 和 x86 版本,则可以通过运行以下命令,使用参数 PackageFullName
来指定要添加的应用程序:
# Specify the package full name
$packageFullName = '<PackageFullName>'
# Get the properties of the application
$parameters = @{
HostPoolName = '<HostPoolName>'
ResourceGroupName = '<ResourceGroupName>'
Uri = '<UNCPathToImageFile>'
}
$app = Expand-AzWvdMsixImage @parameters | ? PackageFullName -like *$packageFullName*
运行以下命令,将 MSIX 映像添加到主机池。 在此示例中,应用程序状态 标记为“活动” 。
$parameters = @{
HostPoolName = '<HostPoolName>'
ResourceGroupName = '<ResourceGroupName>'
PackageAlias = $app.PackageAlias
DisplayName = '<DisplayName>'
ImagePath = $app.ImagePath
IsActive = $true
}
New-AzWvdMsixPackage @parameters
成功添加 MSIX 包时,没有输出。
可以通过运行以下命令来验证是否已添加 MSIX 包:
$parameters = @{
HostPoolName = '<HostPoolName>'
ResourceGroupName = '<ResourceGroupName>'
}
Get-AzWvdMsixPackage @parameters | ? PackageFamilyName -eq $app.PackageFamilyName | FL *
输出应如以下示例所示:
DisplayName : My App
Id : /subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/avd/providers/Microsoft.DesktopVirtualization/hostpools/hp01/msixpackages/MyApp_1.0.0.0_neutral__abcdef123ghij
ImagePath : \\fileshare\Apps\MyApp\MyApp.cim
IsActive : True
IsRegularRegistration : False
LastUpdated : 7/27/2023 10:02:29 AM
Name : hp01/MyApp_1.0.0.0_neutral__abcdef123ghij
PackageApplication : {MyApp}
PackageDependency : {}
PackageFamilyName : MyApp_abcdef123ghij
PackageName : MyApp
PackageRelativePath : apps\MyApp_1.0.0.0_neutral__abcdef123ghij
SystemDataCreatedAt : 7/28/2023 9:04:00 AM
SystemDataCreatedBy : avdadmin@contoso.com
SystemDataCreatedByType : User
SystemDataLastModifiedAt : 7/28/2023 9:04:00 AM
SystemDataLastModifiedBy : avdadmin@contoso.com
SystemDataLastModifiedByType : User
Type : Microsoft.DesktopVirtualization/hostpools/msixpackages
Version : 1.0.0.0
更改注册类型和状态
可以通过更改 MSIX 和 Appx 包的注册类型 和状态 来管理主机池中的 MSIX 包。 选择你的方案对应的相关选项卡并按照步骤操作。
下面介绍如何使用 Azure 门户更改包的注册类型和状态:
从 Azure 虚拟桌面概述中,选择“主机池”,然后选择 MSIX 包添加到的主机池的名称 。
从主机池概述中选择“MSIX 包” 。 应会在主机池中看到所有现有 MSIX 包的列表。
选择要更改的 MSIX 包的名称。
若要更改注册类型,请选择“按需”或“在登录时注册”,然后选择“保存” 。
若要更改状态,请选择“非活动”或“活动”,然后选择“保存” 。
下面介绍如何使用 Az.DesktopVirtualization PowerShell 模块更改包的注册类型和状态。
在同一 PowerShell 会话中,通过运行以下命令,获取主机池上的 MSIX 包及其当前注册类型和状态的列表:
$parameters = @{
HostPoolName = '<HostPoolName>'
ResourceGroupName = '<ResourceGroupName>'
}
Get-AzWvdMsixPackage @parameters | Select-Object DisplayName, ImagePath, Name, Version, IsRegularRegistration, IsActive
输出应如以下示例所示:
DisplayName ImagePath Name Version IsRegularRegistration IsActive
----------- --------- ----------------- ------- --------------------- --------
My App \\fileshare\Apps\MyApp\MyApp.cim hp01/MyApp_1.0.0.0_neutral__abcdef123ghij 1.0.0.0 False True
找到要移除的包并使用 Name
参数的值,但从一开始就移除主机池名称和 /
。 例如,hp01/MyApp_1.0.0.0_neutral__abcdef123ghij
将变为 MyApp_1.0.0.0_neutral__abcdef123ghij
。 下面是一些示例。
通过运行以下命令更改注册类型。 将 IsRegularRegistration
设置为 $true
用于在登录时注册 或 $false
用于按需 。
$parameters = @{
FullName = '<FullName>'
HostPoolName = '<HostPoolName>'
ResourceGroupName = '<ResourceGroupName>'
IsRegularRegistration = $true
}
Update-AzWvdMsixPackage @parameters
通过运行以下命令更改状态。 将 IsActive
设置为 以使用“活动”,或设置为 $false
以使用“非活动”$true
。
$parameters = @{
FullName = '<FullName>'
HostPoolName = '<HostPoolName>'
ResourceGroupName = '<ResourceGroupName>'
IsActive = $true
}
Update-AzWvdMsixPackage @parameters
发布 MSIX 应用程序
可以将 MSIX 应用程序作为桌面或 RemoteApp 应用程序组的一部分提供给用户。 桌面应用程序组可让这些应用程序出现在用户的开始菜单中,而 RemoteApp 应用程序组意味着用户可以单独流式传输应用程序。 有关应用程序组的详细信息,请参阅术语 。 选择你的方案对应的相关选项卡并按照步骤操作。
下面介绍如何使用 Azure 门户将应用程序从本文添加的包中添加到 RemoteApp 应用程序组:
从 Azure 虚拟桌面概述中,选择“应用程序组” ,然后选择要向其中添加应用程序的桌面或 RemoteApp 应用程序组。
选择“应用程序” ,然后选择“+ 添加” 。 确保应用程序组分配到的主机池中至少有一台会话主机已开机。
在“基本信息”选项卡上,可看到的选项取决于应用程序组是面向桌面还是 RemoteApp :
对于桌面应用程序组,请填写以下信息:
参数
值/说明
应用程序源
“MSIX 包”会自动选中并灰显 。
包
从下拉列表中选择可用于主机池的包。
申请标识符
输入应用程序的唯一标识符。
显示名称
为用户输入一个易记应用程序名称。
说明
输入应用程序描述。
完成此选项卡后,选择“查看 + 添加” 。
对于 RemoteApp 应用程序组,请填写以下信息:
参数
值/说明
应用程序源
从下拉列表中选择“应用附加” 。 如果要从“开始”菜单或通过指定文件路径添加应用程序,请参阅 使用 RemoteApp 发布应用程序 。
包
从下拉列表中选择可用于主机池的包。 主机池包来自“MSIX 应用附加” 。
应用程序
从下拉列表中选择一个应用程序。
申请标识符
输入应用程序的唯一标识符。
显示名称
为用户输入一个易记应用程序名称。
说明
输入应用程序描述。
完成此选项卡后,请选择“下一步”。
在“图标”选项卡上,选择“默认”以使用应用程序的默认图标,或选择“文件路径”以使用自定义图标 。 对于“文件路径”,请选择以下选项之一:
浏览 Azure 文件存储 :可使用 Azure 文件共享中的图标。 先选择“选择存储帐户” ,接着选择包含图标文件的存储帐户,然后选择“选择图标文件” 。 浏览到图标所在的文件共享和目录,选中要添加的图标(例如 MyApp.ico
)旁边的框,然后选择“选择” 。 也可以使用 .png
文件。 对于“图标索引” ,请指定要使用的图标的索引号。 此数字通常为 0 。
UNC 文件路径 :可使用文件共享中的图标。 对于“图标路径” ,请输入图标文件的 UNC 路径,例如 \\MyFileShare\MyApp.ico
。 也可以使用 .png
文件。 对于“图标索引” ,请指定要使用的图标的索引号。 此数字通常为 0 。
完成此选项卡后,选择“查看 + 添加” 。
在“查看 + 添加”选项卡上,确保验证通过并查看用于添加应用程序的信息,然后选择“添加”以将应用程序添加到应用程序组中。
下面介绍如何使用 Az.DesktopVirtualization PowerShell 模块将 MSIX 应用程序添加到应用程序组。
在同一 PowerShell 会话中,通过在以下示例之一中运行命令,将 MSIX 应用程序添加到应用程序组。
若要将 MSIX 应用程序添加到桌面应用程序组,请运行以下命令:
$parameters = {
Name = '<ApplicationName>'
ApplicationType = 'MsixApplication'
MsixPackageFamilyName = $app.PackageFamilyName
GroupName = '<ApplicationGroupName>'
ResourceGroupName = '<ResourceGroupName>'
CommandLineSetting = 'DoNotAllow'
}
New-AzWvdApplication @parameters
若要将 MSIX 应用程序添加到 RemoteApp 应用程序组,如果包中有多个应用程序,则需要运行以下命令以获取要从包中添加的应用程序的应用程序 ID:
Write-Host "These are the application IDs available in the package. Many packages only contain one application." -ForegroundColor Yellow
$app.ImagePackageApplication.AppId
记下要发布的应用程序 ID(例如 App
),然后运行以下命令,以将应用程序添加到 RemoteApp 应用程序组:
$parameters = @{
Name = '<ApplicationName>'
ApplicationType = 'MsixApplication'
MsixPackageFamilyName = $app.PackageFamilyName
MsixPackageApplicationId = '<ApplicationID>'
GroupName = '<ApplicationGroupName>'
ResourceGroupName = '<ResourceGroupName>'
CommandLineSetting = 'DoNotAllow'
}
New-AzWvdApplication @parameters
通过运行以下命令验证应用程序组中的应用程序列表:
$parameters = @{
GroupName = '<ApplicationGroupName>'
ResourceGroupName = '<ResourceGroupName>'
}
Get-AzWvdApplication @parameters
删除 MSIX 包
可以移除不再需要的 MSIX 包。 选择你的方案对应的相关选项卡并按照步骤操作。
提示
也可以只从应用程序组中移除 MSIX 软件包中的应用程序,方法与其他应用程序类型相同。 有关详细信息,请参阅移除应用程序 。
下面介绍如何使用 Azure 门户从主机池中移除 MSIX 包:
从 Azure 虚拟桌面概述中,选择“主机池”,然后选择 MSIX 包添加到的主机池的名称 。
从主机池概述中选择“MSIX 包” 。 应会在主机池中看到所有现有 MSIX 包的列表。
选中要移除的 MSIX 包名称旁边的框,然后选择“移除” 。
下面介绍如何使用 Az.DesktopVirtualization PowerShell 模块移除应用程序。
在同一 PowerShell 会话中,通过运行以下命令获取主机池上的 MSIX 包的列表:
$parameters = @{
HostPoolName = '<HostPoolName>'
ResourceGroupName = '<ResourceGroupName>'
}
Get-AzWvdMsixPackage @parameters | Select-Object DisplayName, ImagePath, PackageFamilyName, Version
输出应如以下示例所示:
DisplayName ImagePath Name Version
----------- --------- ----------------- -------
My App \\fileshare\Apps\MyApp\MyApp.cim hp01/MyApp_1.0.0.0_neutral__abcdef123ghij 1.0.0.0
找到要移除的包并使用 Name
参数的值,但从一开始就移除主机池名称和 /
。 例如,hp01/MyApp_1.0.0.0_neutral__abcdef123ghij
将变为 MyApp_1.0.0.0_neutral__abcdef123ghij
。 然后运行以下命令来移除包:
$parameters = @{
FullName = '<FullName>'
HostPoolName = '<HostPoolName>'
ResourceGroupName = '<ResourceGroupName>'
}
Remove-AzWvdMsixPackage @parameters
禁用自动更新
建议禁用 MSIX 和 Appx 应用程序的自动更新。 若要禁用自动更新,需要在会话主机上设置以下注册表值:
建议禁用 MSIX 应用程序的自动更新。 若要禁用自动更新,需要在会话主机上设置以下注册表值:
Key:HKLM\Software\Policies\Microsoft\WindowsStore
类型:DWORD
Name:AutoDownload
Value:2
说明:禁用 Microsoft Store 自动更新 。
Key:HKCU\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager
类型:DWORD
Name:PreInstalledAppsEnabled
值 :0
说明 :禁用内容传送自动下载。
Key:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager\Debug
类型:DWORD
Name:ContentDeliveryAllowedOverride
Value:2
说明 :禁用内容传送自动下载。
可以使用组策略设置这些注册表值,具体取决于管理会话主机的方式。 还可以通过在每个会话主机上以管理员身份运行以下 PowerShell 命令来设置它们,但如果这样做,还应在操作系统映像中设置它们:
# Disable Microsoft Store automatic update
If (!(Test-Path "HKLM:\Software\Policies\Microsoft\WindowsStore")) {
New-Item -Path "HKLM:\Software\Policies\Microsoft\WindowsStore" -Force
}
New-ItemProperty -Path "HKLM:\Software\Policies\Microsoft\WindowsStore" -Name AutoDownload -PropertyType DWORD -Value 2 -Force
# Disable content delivery automatic download
If (!(Test-Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager")) {
New-Item -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Force
}
New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name PreInstalledAppsEnabled -PropertyType DWORD -Value 0 -Force
# Disables content delivery automatic download
If (!(Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager\Debug")) {
New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager\Debug" -Force
}
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager\Debug" -Name ContentDeliveryAllowedOverride -PropertyType DWORD -Value 2 -Force
后续步骤
了解如何使用 RemoteApp 从“开始”菜单或文件路径发布应用程序。 有关详细信息,请参阅发布应用程序 。