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

Azure CLI 命令的输出格式

Azure CLI 使用 JSON 作为默认输出格式,但提供其他格式。 使用 --output--out-o)参数设置 CLI 输出的格式。 输出的参数值和类型为:

--output 说明
json JSON 字符串。 此设置为默认设置
jsonc 彩色 JSON
table 将键作为列标题的 ASCII 表
tsv 制表符分隔值,没有键
yaml YAML,一种人工可读的 JSON 替代格式
yamlc 彩色 YAML
none 除了错误和警告以外不输出任何内容

警告

使用 none 的输出格式或将命令输出存储在变量中,以避免公开 API 密钥和凭据等机密。 注意: 某些 CI/CD 环境可能会将所执行命令的输出存储在日志中。 确认这些日志文件中写入的内容以及谁有权访问日志是一种很好的做法。 有关详细信息,请参阅 None 输出格式

JSON 输出格式(默认格式)

以下示例以默认 JSON 格式显示订阅中的虚拟机列表。

az vm list --output json

以下输出有为简便起见而省略的一些字段并替换了标识信息。

[
  {
    "availabilitySet": null,
    "diagnosticsProfile": null,
    "hardwareProfile": {
      "vmSize": "Standard_DS1"
    },
    "id": "/subscriptions/.../resourceGroups/DEMORG1/providers/Microsoft.Compute/virtualMachines/DemoVM010",
    "instanceView": null,
    "licenseType": null,
    "location": "westus",
    "name": "DemoVM010",
    "networkProfile": {
      "networkInterfaces": [
        {
          "id": "/subscriptions/.../resourceGroups/demorg1/providers/Microsoft.Network/networkInterfaces/DemoVM010VMNic",
          "primary": null,
          "resourceGroup": "demorg1"
        }
      ]
    },
          ...
          ...
          ...
]

YAML 输出格式

yaml 格式将输出打印为 YAML(一种纯文本数据序列化格式)。 YAML 往往比 JSON 更容易阅读,并且可以轻松映射到该格式。 某些应用程序和 CLI 命令将 YAML(而不是 JSON)作为配置输入。

az vm list --output yaml

以下输出有为简便起见而省略的一些字段并替换了标识信息。

- availabilitySet: null
  diagnosticsProfile: null
  hardwareProfile:
    vmSize: Standard_DS1_v2
  id: /subscriptions/.../resourceGroups/DEMORG1/providers/Microsoft.Compute/virtualMachines/DemoVM010
  identity: null
  instanceView: null
  licenseType: null
  location: westus
  name: ExampleVM1
  networkProfile:
    networkInterfaces:
    - id: /subscriptions/.../resourceGroups/DemoRG1/providers/Microsoft.Network/networkInterfaces/DemoVM010Nic
      primary: null
      resourceGroup: DemoRG1
  ...
...

表输出格式

table 格式以 ASCII 表的形式列显输出,因此可以轻松阅读和扫描输出。 嵌套对象不会包含在表输出中,但仍可以作为查询的一部分进行筛选。 某些字段不会包含在表中,因此,当你想要数据的快速、人工可搜索的概述时,此格式最佳。

az vm list --output table
Name         ResourceGroup    Location
-----------  ---------------  ----------
DemoVM010    DEMORG1          westus
demovm212    DEMORG1          westus
demovm213    DEMORG1          westus
KBDemo001VM  RGDEMO001        westus
KBDemo020    RGDEMO001        westus

可以使用 --query 参数来自定义要在列表输出中显示的属性和列。 以下示例演示如何只在 list 命令中选择 VM 名称和资源组名称。

az vm list --query "[].{resource:resourceGroup, name:name}" --output table
Resource    Name
----------  -----------
DEMORG1     DemoVM010
DEMORG1     demovm212
DEMORG1     demovm213
RGDEMO001   KBDemo001VM
RGDEMO001   KBDemo020

注意

默认情况下,某些键不会在表视图中列显。 这些键是 idtypeetag。 如果需要在输出中查看这些键,可以使用 JMESPath 重新键入功能更改键名称,并避免筛选。

az vm list --query "[].{objectID:id}" --output table

若要详细了解如何使用查询来筛选数据,请参阅在 Azure CLI 中使用 JMESPath 查询

TSV 输出格式

tsv 输出格式返回制表符和换行符分隔的值,而不带额外格式设置、键或其他符号。 采用这种格式可在需要以某种形式处理文本的其他命令和工具中轻松使用输出。 与 table 格式一样,tsv 不会列显嵌套的对象。

在前面的示例中使用 tsv 选项会输出制表符分隔结果。

az vm list --output tsv
None    None        /subscriptions/.../resourceGroups/DEMORG1/providers/Microsoft.Compute/virtualMachines/DemoVM010    None    None    westus    DemoVM010            None    Succeeded    DEMORG1    None            Microsoft.Compute/virtualMachines    cbd56d9b-9340-44bc-a722-25f15b578444
None    None        /subscriptions/.../resourceGroups/DEMORG1/providers/Microsoft.Compute/virtualMachines/demovm212    None    None    westus    demovm212            None    Succeeded    DEMORG1    None            Microsoft.Compute/virtualMachines    4bdac85d-c2f7-410f-9907-ca7921d930b4
None    None        /subscriptions/.../resourceGroups/DEMORG1/providers/Microsoft.Compute/virtualMachines/demovm213    None    None    westus    demovm213            None    Succeeded    DEMORG1    None            Microsoft.Compute/virtualMachines    2131c664-221a-4b7f-9653-f6d542fbfa34
None    None        /subscriptions/.../resourceGroups/RGDEMO001/providers/Microsoft.Compute/virtualMachines/KBDemo001VM    None    None    westus    KBDemo001VM            None    Succeeded    RGDEMO001    None            Microsoft.Compute/virtualMachines    14e74761-c17e-4530-a7be-9e4ff06ea74b
None    None        /subscriptions/.../resourceGroups/RGDEMO001/providers/Microsoft.Compute/virtualMachines/KBDemo020   None    None    westus    KBDemo020            None    Succeeded    RGDEMO001    None            Microsoft.Compute/virtualMachines    36baa9-9b80-48a8-b4a9-854c7a858ece

TSV 输出格式的一个限制是不能保证输出顺序。 CLI 通过按字母顺序对响应 JSON 中的键进行排序,然后按 TSV 输出的顺序输出其值,来尽可能地保持顺序。 无法保证顺序始终相同,因为 Azure 服务响应格式可能会更改。

若要强制执行一致的排序,需要使用 --query 参数和多选列表格式。 当 CLI 命令返回单个 JSON 字典时,请使用常规格式 [key1, key2, ..., keyN] 强制键顺序。 对于返回数组的 CLI 命令,请使用常规格式 [].[key1, key2, ..., keyN] 对列值进行排序。

例如,若要按 ID、位置、资源组和 VM 名称对显示的信息进行排序,请执行以下命令:

az vm list --output tsv --query '[].[id, location, resourceGroup, name]'
/subscriptions/.../resourceGroups/DEMORG1/providers/Microsoft.Compute/virtualMachines/DemoVM010    westus    DEMORG1    DemoVM010
/subscriptions/.../resourceGroups/DEMORG1/providers/Microsoft.Compute/virtualMachines/demovm212    westus    DEMORG1    demovm212
/subscriptions/.../resourceGroups/DEMORG1/providers/Microsoft.Compute/virtualMachines/demovm213    westus    DEMORG1    demovm213
/subscriptions/.../resourceGroups/RGDEMO001/providers/Microsoft.Compute/virtualMachines/KBDemo001VM     westus  RGDEMO001       KBDemo001VM
/subscriptions/.../resourceGroups/RGDEMO001/providers/Microsoft.Compute/virtualMachines/KBDemo020       westus  RGDEMO001       KBDemo020

以下示例演示如何通过管道将 tsv 输出传送到 bash 中的其他命令。 该查询用于筛选输出和强制排序,grep 选择其中包含文本“RGD”的项,然后 cut 命令选择第四个字段以在输出中显示 VM 的名称。

az vm list --output tsv --query '[].[id, location, resourceGroup, name]' | grep RGD | cut -f4
KBDemo001VM
KBDemo020

将值分配给变量时,通常会使用 tsv 输出格式。 此示例获取活动订阅 ID,并将其存储到变量中以用于脚本。

# Bash Script
subscriptionID=$(az account show --query id --output tsv)
echo "Using subscription ID $subscriptionID"

有关更多 --query 参数示例,请参阅如何查询 Azure CLI 命令输出

None 输出格式

某些 Azure CLI 命令会输出你必须保护的信息。 下面是 4 个示例:

  • 密码
  • 连接字符串
  • 机密
  • keys

若要在使用 Azure CLI 命令时保护机密和密钥,请选择以下选项之一:

选项 优势 用例
--output none 输出格式 防止敏感信息显示在控制台中。 如果命令失败,你仍会收到错误消息。 1.当命令输出可供在以后检索时使用。
2.对输出没有需求时使用。
3.托管标识或服务主体用于管理 Azure 资源时的常见选择。
--query 参数 将输出存储在变量中。 1.当命令输出不可供在以后检索时使用。
2.需要在脚本中使用命令输出值时使用。

使用 none 并在以后检索安全信息

某些 Azure 机密可供在以后检索。 一个很好的示例是存储在 Azure Key Vault 中的机密。 下面的示例将 az keyvault secret set--output none 选项配合使用来创建一个 Azure Key Vault 机密。 可在以后使用 az keyvault secret show 命令检索该机密。

az keyvault secret set --name MySecretName \
                       --vault-name MyKeyVaultName \
                       --value MySecretValue\
                       --output none

使用 --query 并将安全信息返回到变量

从技术上来讲,使用 --query 将输出存储到变量中不是一种输出格式。 它是一种保护机密的解决方案,是使用 --output none 的替代方法。 例如,重置了服务主体凭据时,将无法再次检索到该密码。

重置服务主体凭据,并以默认的 json 格式返回输出:

# reset service principal credentials using default output format (json).
az ad sp credential reset --id myServicePrincipalID --output json

控制台输出,其中显示了控制台中的新密码。

{
  "appId": "myServicePrincipalID",
  "password": "myServicePrincipalNewPassword",
  "tenant": "myTenantID"
}

更好的解决方案是将敏感信息返回到变量。

# Bash Script
# reset service principal credentials returning results to a variable
myNewPassword=$(az ad sp credential reset --id myServicePrincipalID --query password --output tsv)

# Display the new password (remove this line in production for security)
echo "New password: $myNewPassword"

有关将输出存储到变量的更多示例,请参阅成功使用 Azure CLI - 将值传递给另一个命令。 若要详细了解 --query 参数语法,请参阅如何查询 Azure CLI 命令输出

设置默认输出格式

Azure CLI 命令提供可通过两种方式控制的输出:

输出控制 优势 操作说明
全局设置 选择使用最多的默认输出值,这样就不必为每个参考命令持续提供 --output 参数。 使用 az config set 指定默认输出格式。
命令参数 在命令级别指定输出,并为脚本提供最大的灵活性。 可以控制每个参考命令的控制台输出和变量输入。 使用参考命令的 --output 参数替代默认设置。

Azure CLI 的默认输出是 json。 当不需要控制台输出录时,将默认输出设置为 none

az config set core.output=none

可以使用 --output 参数覆盖任何 Azure CLI 参考命令的默认输出。 下面是更改和测试命令输出的命令脚本:

# set your default output to table
az config set core.output=table

# show your active subscription in table format
# notice how only a subset of properties are returned in the table
az account show

# override your table default and show your active subscription in jsonc format
az account show --output jsonc

# reset your default output to json
az config set core.output=json

另请参阅