Output format option--output table(-o table) 是意味着人性化(表格)显示而不是程序化处理.
它是最好使用基于的输出格式结构化文本, 比如 JSON.
事实上,JSON 是默认输出格式,所以你可以简单忽略您的 --out table 参数并使用 ConvertFrom-Json 解析输出并提取感兴趣的值:
# Outputs all public IP addresses contained in the JSON response.
# Since you're targeting only a *single* VM, the address(es) all refer to that VM.
$ip =
(
az vm list-ip-addresses --name VMname --resource-group GroupName |
ConvertFrom-Json
).virtualMachine.network.publicIpAddresses.ipaddress
返回的 JSON 数据的结构假定与this question 中的相同。
请注意,您可以精简通过使用--query 参数执行JMESPath 查询的操作在源头,以便直接返回唯一感兴趣的值:
$ip =
(az vm list-ip-addresses --query '[].virtualMachine.network.publicIpAddresses[].ipAddress' --name VMname --resource-group GroupName |
ConvertFrom-Json)
笔记:
- 您可以使用
--output tsv 进一步简化此操作,在这种情况下您不需要ConvertFrom-Json 调用- 见下文。
根据this answer,如下较短的替代方案使用 az vm show 子命令 - 而不是 az vm list-ip-addresses - 也可以:
$ip =
az vm show --show-details --resource-group --name vmName --query publicIps --output tsv
笔记:
提取公共 IP多VM(资源组中的所有 VM):
# Returns the names and public IP addresses for all VMs in the
# given resource group, as [pscustomobject] instances with
# .name and .publicIds properties (the latter being an array).
$objects =
az vm list-ip-addresses --query '[].virtualMachine.{ name: name, publicIps: network.publicIpAddresses[].ipAddress }' --resource-group GroupName |
ConvertFrom-Json