如何查询弹性编排模式下Azure VMSS实例的计算机名称
如何查询弹性编排模式下VM Scale Set的实例详情?
问题场景
- 执行
az vmss list-instances --resource-group rg-name --name my-vmss-name --output json命令时,统一编排模式的VMSS会返回包含osProfile.computerName的完整实例详情,但弹性编排模式下仅返回基础信息(如实例ID、名称、资源组等),无法获取computerName字段。 - 弹性VMSS实例返回的数据示例:
[ { "id": "/subscriptions/xxxxxx", "instanceId": "my_instance1_fc8548e2", "location": "northeurope", "name": "my_instance1_fc8548e2", "resourceGroup": "my-rg", "type": "Microsoft.Compute/virtualMachineScaleSets/virtualMachines", "zones": [] }, { "id": "/subscriptions/xxxxxxx", "instanceId": "my_instance1_fda96383", "location": "northeurope", "name": "my_instance1_fda96383", "resourceGroup": "my-rg", "type": "Microsoft.Compute/virtualMachineScaleSets/virtualMachines", "zones": [] } ]
- 使用PowerShell命令
Get-AzVmssVM无法返回运行中实例的osProfile,添加instanceView=true选项会触发400错误:
Operation 'VirtualMachineScaleSets.virtualMachines.GET' is not allowed on Virtual Machine Scale Set
解决方案
弹性编排模式的VMSS中,每个实例本质是独立的Azure虚拟机资源,因此需要通过查询普通VM的方式获取完整详情:
Azure CLI 实现
先获取所有弹性VMSS实例名称,再逐个查询实例的完整信息:
# 获取弹性VMSS所有实例名称并遍历查询 az vmss list-instances --resource-group my-rg --name my-vmss-name --query "[].name" --output tsv | while read vm_name; do az vm show --resource-group my-rg --name $vm_name --query "{computerName:osProfile.computerName, id:id, instanceId:instanceId}" --output json done
PowerShell 实现
遍历弹性VMSS实例列表,调用普通VM查询命令获取详情:
# 获取弹性VMSS实例列表 $vmssInstances = Get-AzVmssVM -ResourceGroupName my-rg -VMScaleSetName my-vmss-name # 逐个查询实例完整信息 foreach ($instance in $vmssInstances) { Get-AzVM -ResourceGroupName my-rg -Name $instance.Name | Select-Object Name, @{Name='ComputerName'; Expression={$_.OSProfile.ComputerName}}, Id, InstanceId }
核心说明
弹性编排模式与统一编排模式的核心差异在于:弹性模式下的实例是独立的VM资源,而非由VMSS统一管控的实例单元,因此传统的VMSS实例查询接口无法返回完整的VM配置信息,必须直接针对每个VM资源执行查询。
内容的提问来源于stack exchange,提问作者Alexey Ryazhskikh
相关产品推荐
相关产品推荐

