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 環境可能會將已執行命令的輸出儲存在記錄中。 確認這些記錄檔中寫入的內容以及可存取記錄的人員是很好的作法。
如需詳細資訊,請參閱 無輸出格式。
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
注意
某些索引鍵預設不會列印在數據表檢視中。 這些是 id
、 type
與 etag
。 如果您需要在輸出中看到這些專案,您可以使用 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]
來排序數據行值。
例如,若要依識別碼、位置、資源群組和 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
值指派給變數時,通常會使用輸出格式。 本範例會取得使用中的訂用帳戶標識碼,並將它儲存在變數中以供腳本使用。
# Bash Script
subscriptionID=$(az account show --query id --output tsv)
echo "Using subscription ID $subscriptionID"
如需更多 --query
參數範例,請參閱 如何查詢 Azure CLI 命令輸出。
無輸出格式
您必須保護的一些 Azure CLI 命令輸出資訊。 以下是四個範例:
- 使用者
- 連接字串
- 祕密
- 金鑰
若要在使用 Azure CLI 命令時保護秘密和金鑰,請選擇下列其中一個選項:
選項 | 優點 | 使用案例 |
---|---|---|
--output none 輸出格式 |
讓敏感性信息無法顯示在控制台中。 如果您的命令失敗,您仍然會收到錯誤訊息。 | 1.稍後可以擷取命令輸出時使用。 |
2.當您不需要輸出時,請使用 。 | ||
3.當受控識別或服務主體用來管理 Azure 資源時,常見的選擇。 | ||
--query 參數 |
將輸出儲存在變數中。 | 1.稍後無法擷取命令輸出時使用。 |
2.當您需要在文稿中使用命令輸出值時,請使用 。 |
稍後使用 none
及擷取安全性資訊
稍後可以擷取某些 Azure 秘密。 一個很好的範例是儲存在 Azure 金鑰保存庫 中的秘密。 在此範例中,使用 az keyvault secret set 搭配 --output none
選項來建立 Azure 金鑰保存庫 秘密。 您稍後可以使用 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
您可以使用 參數覆寫任何 Azure CLI 參考命令 --output
的預設輸出。 以下是改變和測試命令輸出的命令文稿:
# 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