如何使用PowerShell获取指定主机池(host pool)下的虚拟机(VM)列表
特定Azure主机池下关联虚拟机列表查询方案
Azure 主机池与虚拟机的关联关系属于 Azure 虚拟桌面(AVD)的专属资源属性,不会直接暴露在Get-AzVM返回的虚拟机基础属性中,需要通过 AVD 会话主机资源作为桥接完成关联查询。
操作前置要求
- 提前安装 Azure 虚拟桌面对应 PowerShell 模块:
Install-Module -Name Az.DesktopVirtualization -Force Import-Module Az.DesktopVirtualization - 执行前先完成 Azure 账号鉴权:
Connect-AzAccount,多租户环境需指定对应租户ID。
具体查询步骤
- 先获取目标主机池的资源对象
# 替换尖括号内的参数为你的实际资源信息 $hostPool = Get-AzWvdHostPool -ResourceGroupName <目标资源组名称> -Name <目标主机池名称> - 查询该主机池下挂载的所有会话主机资源(包含关联VM的资源ID)
$sessionHosts = Get-AzWvdSessionHost -HostPoolName $hostPool.Name -ResourceGroupName $hostPool.ResourceGroupName - 关联查询对应虚拟机的完整详细信息
$relatedVMs = foreach ($sessionHost in $sessionHosts) { Get-AzVM -Id $sessionHost.VmResourceId } # 输出格式化的VM基础信息 $relatedVMs | Select-Object Name, ResourceGroupName, Location, VmId, ProvisioningState, PowerState | Format-Table -AutoSize
扩展:合并输出主机池会话状态与VM信息
如果需要同时查看虚拟机的运行状态、以及在主机池内的会话状态,可以使用以下脚本生成合并报表:
$mergeResult = foreach ($sessionHost in $sessionHosts) { $vm = Get-AzVM -Id $sessionHost.VmResourceId [PSCustomObject]@{ 虚拟机名称 = $vm.Name 所属主机池 = $hostPool.Name 会话主机状态 = $sessionHost.Status 允许新会话 = $sessionHost.AllowNewSession 虚拟机运行状态 = $vm.PowerState 操作系统版本 = "$($vm.StorageProfile.ImageReference.Offer) $($vm.StorageProfile.ImageReference.Sku)" 所属资源组 = $vm.ResourceGroupName } } $mergeResult | Format-Table -AutoSize
内容的提问来源于stack exchange,提问作者Mamquam
相关产品推荐
相关产品推荐

