Powershell-Invoke-RestMethod获取VM名称



尝试列出所有使用https://b-blog.info/en/monitoring-azure-resources-with-zabbix.html

$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不提供任何内容下一行也是空的(获取VM名称(

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
}

FL将对象格式化为字符串,因此无法从中扩展任何属性。

在您的情况下,Select * | FL是不必要的,只会阻碍您。删除它应该会使数据开始返回。

编辑:我只是通过查看您的JSON得到了正确的属性名称。

(Invoke-RestMethod -Uri $uri -Headers $azure_header -Method Get -ErrorAction Stop).value.properties.osProfile.computerName

@Avshalom感谢您,我找到了解决方案(只留下Value属性(:

$a=(Invoke-RestMethod -Uri $uri -Headers $azure_header -Method Get -ErrorAction Stop).Value
Write-Host $a.name
output:test

相关内容

最新更新