繁体   English   中英

Powershell-Invoke-RestMethod获取虚拟机名称

[英]Powershell - Invoke-RestMethod get VM name

尝试使用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没有任何内容,下一行也为空(获取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 就您而言, 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM