【问题标题】:Powershell - Select only one value from -out tablePowershell - 从 -out 表中仅选择一个值
【发布时间】:2022-11-11 02:11:10
【问题描述】:

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

代码是:

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

【问题讨论】:

    标签: azure powershell azure-cli


    【解决方案1】:

    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 将其捕获为单个字符串或字符串数​​组。

    提取公共 IPVM(资源组中的所有 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      • 2016-12-04
      • 2012-03-04
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      相关资源
      最近更新 更多