你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

通过查询获取 VM 信息

创建 VM 以后,即可检索其详细信息。 从资源获取信息的常用命令是 show

az vm show --name $vmName --resource-group $resourceGroup

虚拟机具有许多难以直观分析的属性。 返回的 JSON 包含身份验证、网络接口、存储等方面的信息。 最重要的是,它包含 VM 所连接到的资源的 Azure 对象 ID。 可以通过对象 ID 直接访问这些资源,获取有关 VM 配置和功能的详细信息。

可以使用 --query 参数来提取对象 ID。 查询采用 JMESPath 查询语言编写。首先获取网络接口控制器 (NIC) 对象 ID。

az vm show --name $vmName \
  --resource-group $resourceGroup \
  --query 'networkProfile.networkInterfaces[].id' \
  --output tsv

在这里,添加查询涉及到许多事项。 其中的每个部分引用输出 JSON 中的一个项,或者是一个 JMESPath 运算符。

  • networkProfile 是顶级 JSON 的一个项,使用 networkInterfaces 作为子项。 如果 JSON 值是一个字典,则其项是使用 . 运算符从父项引用。
  • networkInterfaces 值为数组,因此可通过 [] 运算符使其平展。 此运算符在每个数组元素上运行查询的其余部分。 在此示例中,它获取每个数组元素的 id 值。

可保证输出格式 tsv(制表符分隔值)只包含结果数据以及由制表符和换行符组成的空格。 由于返回的值是单个裸字符串,因此可以安全地将其直接分配给 shell 变量。

有关查询 Azure CLI 输出的详细信息,请参阅如何使用 JMESPath 查询来查询 Azure CLI 命令输出

现在请继续操作,将 NIC 对象 ID 分配给 shell 变量。

nicId=$(az vm show \
  -n $vmName \
  -g $resourceGroup \
  --query 'networkProfile.networkInterfaces[].id' \
  -o tsv)

此示例还演示了如何使用短参数。 可以使用 -g 而非 --resource-group-n 而非 --name-o 而非 --output