azure - Powershell - 从 -out 表中仅选择一个值

标签 azure powershell azure-cli

我只需从输出表中选择一个值。

代码是:

az vm list-ip-addresses --name VMname --resource-group GroupName --out table

我得到的结果如下

VirtualMachine    PublicIPAddresses    PrivateIPAddresses
----------------  -------------------  --------------------
VMName            XX.XX.XX.XX          XX.XX.XX.XX

我只想选择 PublicIPAddresses 值并将其提取到 csv。

TIA

最佳答案

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

注意:

  • 上面使用了不同的结构化文本格式,TSV(制表符分隔值),以及--output tsv,在这个简单的例子中,它避免了需要在 PowerShell 端进行后处理:

    • 查询仅返回一个或多个字符串值,这些值以 TSV 格式按原样输出,并且,如果有多个字符串,则每个字符串各占一行。 PowerShell 将其捕获为单个字符串或字符串数​​组。
<小时/>

为多个虚拟机(资源组中的所有虚拟机)提取公共(public) IP:

# 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

关于azure - Powershell - 从 -out 表中仅选择一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74018399/

相关文章:

azure - 我们是否有类似于 Azure Powershell 中 Azure CLI 的 --debug 开关的选项?

azure - 如何在 Azure 上为我的网站找到合适的应用服务?

使用自定义 docker run 命令部署容器的 Azure Web 应用程序

powershell - 无法使用 powershell 从文件名中删除 '+' 符号

powershell - 如何忽略字母/单词?

azure - 如何使用 azure CLI 停止插槽中的函数应用

time - 同步 Azure 中角色之间的时间

powershell - 更改/重命名AzureReservedIP的ReservedIPName

powershell - 使用 Azure 资源管理器时如何获取 CustomScriptExtensions 的输出?

azure - 在企业笔记本电脑中安装 Bicep cli 错误