代码之家  ›  专栏  ›  技术社区  ›  Milister

Powershell-调用RestMethod获取VM名称

  •  0
  • Milister  · 技术社区  · 6 年前

    尝试列出所有使用Azure 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什么也不给 下一行也是空的(get VM name)

    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
        }
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Jacob Colvin    6 年前

    FL将对象格式化为字符串,因此不能从中展开任何属性。

    这个 Select * | FL 在你的情况下是不必要的,只会妨碍你。删除它将获得开始返回的数据。

    编辑:通过查看JSON,我得到了正确的属性名。

    (Invoke-RestMethod -Uri $uri -Headers $azure_header -Method Get -ErrorAction Stop).value.properties.osProfile.computerName
    
        2
  •  0
  •   Milister    6 年前

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

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