如何查询Azure订阅中无标签的所有虚拟机
如何查询Azure订阅中所有无标签的虚拟机?
你的原代码确实会列出所有无标签的Azure资源(比如网卡、负载均衡器这类),要只筛选出虚拟机的话,只需要加上资源类型的判断条件就行,这里给你两种实用的实现方式:
方式一:提前过滤虚拟机资源(推荐,更高效)
直接在Get-AzureRmResource命令里指定资源类型,这样不用遍历所有资源,执行速度更快:
# 获取所有虚拟机资源,再筛选无标签的实例 $vms = Get-AzureRmResource -ResourceType 'Microsoft.Compute/virtualMachines' foreach($vm in $vms) { # PowerShell最佳实践:把$null放在左边,避免因变量类型问题导致判断出错 if ($null -eq $vm.Tags) { Write-Output "无标签虚拟机名称: $($vm.Name)" # 也可以输出资源ID方便定位:Write-Output "无标签虚拟机: $($vm.Name) | 资源ID: $($vm.ResourceId)" } }
方式二:在原代码基础上修改
如果你想保留遍历所有资源的逻辑,只需要在判断标签为空的同时,加上资源类型的校验:
$resources = Get-AzureRmResource foreach($resource in $resources) { # 同时满足「是虚拟机」和「无标签」两个条件 if ($resource.ResourceType -eq 'Microsoft.Compute/virtualMachines' -and $null -eq $resource.Tags) { Write-Output $resource.Name, $resource.ResourceType } }
补充个小细节:尽量用$null -eq $vm.Tags而不是$vm.Tags -eq $null,这是PowerShell里的最佳实践,能避免一些因为变量类型(比如空集合)导致的判断错误。
内容的提问来源于stack exchange,提问作者bonafide
相关产品推荐
相关产品推荐

