尝试使用https://b-blog.info/en/monitoring-azure-resources-with-zabbix.html列出所有Azure VM
$uri = "https://management.azure.com/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Compute/virtualMachines?api-version=2017-12-01" -f `
$subscription_id, `
$resource_group;
write-host $uri
https://management.azure.com/subscriptions/111111-1111-111-11111-111/resourceGroups/rg/providers/Microsoft.Compute/virtualMachines?api-version=2017-12-01
此代码提供输出(当前只有一个VM)
Invoke-RestMethod -Uri $uri -Headers $azure_header -Method Get -ErrorAction Stop | select * | fl
value : {@{properties=; type=Microsoft.Compute/virtualMachines; location=westeurope; id=/subscriptions/111111-222-1111-1111-111111/resourceGroups/rg/providers/Microsoft.Compute/virtualMachines/test; name=test}}
此行(按上面的链接)没有任何作用:
$a=(Invoke-RestMethod -Uri $uri -Headers $azure_header -Method Get -ErrorAction Stop | select * | fl ).content.properties;
写主机$ a没有任何作用 并且下一行也为空(获取虚拟机名称)
foreach ($machine in $machines) {
$uri = https://management.azure.com/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Compute/virtualMachines/{2}?api-version=2017-12-01" -f `
$subscription_id, `
$resource_group, `
$machine.name;
write-host $machine.name
}
答案 0 :(得分:1)
FL将对象格式化为字符串,因此无法从该对象扩展任何属性。
您的情况下的Select * | FL
是不必要的,只会妨碍您。删除它应该会得到数据以开始返回。
编辑:仅通过浏览JSON,我便获得了正确的属性名称。
(Invoke-RestMethod -Uri $uri -Headers $azure_header -Method Get -ErrorAction Stop).value.properties.osProfile.computerName
答案 1 :(得分:0)
@Avshalom我找到了感谢您的解决方案(仅保留Value属性):
$a=(Invoke-RestMethod -Uri $uri -Headers $azure_header -Method Get -ErrorAction Stop).Value
Write-Host $a.name
output:test