如何在脚本中显示Azure Virtual Desktop会话主机属性而非序列化对象
解决Azure AVD会话主机属性仅显示类型名的问题
问题根源
你当前脚本用Write-Host $sessionHost输出对象时,PowerShell会调用该对象的ToString()方法,而Azure PowerShell返回的SessionHost对象默认字符串表示就是它的类型全称(Microsoft.Azure.PowerShell.Cmdlets.DesktopVirtualization.Models.Api202209.SessionHost),所以看不到具体属性。哪怕尝试用Format-List,如果还是搭配Write-Host输出,同样只会显示格式化对象的类型名,而非实际属性内容。
修复方案
方案1:直接输出对象(推荐)
去掉Write-Host,直接输出$sessionHost,PowerShell会自动识别对象类型并格式化展示其属性;或者用Format-List *强制显示所有属性:
$resourceGroup = "Group1" $hostPoolObjects = Get-AzWvdHostPool -ResourceGroupName $resourceGroup foreach ($hostPool in $hostPoolObjects) { $sessionHosts = Get-AzWvdSessionHost -HostPoolName $hostPool.Name -ResourceGroupName $resourceGroup foreach ($sessionHost in $sessionHosts) { # 直接输出,PowerShell自动格式化 $sessionHost # 若要查看所有属性,替换为下面一行 # $sessionHost | Format-List * } }
方案2:提取指定属性输出
如果需要用Write-Host自定义输出格式,直接提取对象的具体属性值:
$resourceGroup = "Group1" $hostPoolObjects = Get-AzWvdHostPool -ResourceGroupName $resourceGroup foreach ($hostPool in $hostPoolObjects) { $sessionHosts = Get-AzWvdSessionHost -HostPoolName $hostPool.Name -ResourceGroupName $resourceGroup foreach ($sessionHost in $sessionHosts) { Write-Host "会话主机名:$($sessionHost.Name),状态:$($sessionHost.Status),当前会话数:$($sessionHost.Session)" } }
方案3:用Select-Object筛选属性
如果只需要查看部分核心属性,可通过Select-Object指定:
$resourceGroup = "Group1" $hostPoolObjects = Get-AzWvdHostPool -ResourceGroupName $resourceGroup foreach ($hostPool in $hostPoolObjects) { $sessionHosts = Get-AzWvdSessionHost -HostPoolName $hostPool.Name -ResourceGroupName $resourceGroup $sessionHosts | Select-Object Name, Status, Session, LastHeartBeat }
内容的提问来源于stack exchange,提问作者theillien
相关产品推荐
相关产品推荐

