Formáty výstupu pro příkazy Azure CLI

Azure CLI jako výchozí výstupní formát používá JSON, ale nabízí i jiné formáty. K formátování výstupu CLI použijte parametr --output (--out nebo -o). Hodnoty argumentu a typy výstupu:

--output Popis
json Řetězec ve formátu JSON. Toto nastavení je výchozí.
jsonc Barevný formát JSON
table Tabulka ASCII s klíči jako záhlaví sloupců
tsv Hodnoty oddělené tabulátorem, bez klíčů.
yaml YAML, alternativa pro čtení člověka k FORMÁTU JSON
yamlc Obarvené YAML
none Žádný výstup kromě chyb a upozornění

Upozorňující

Pomocí výstupního formátu výstupu none příkazu nebo uložením výstupu v proměnné se vyhněte odhalení tajných kódů, jako jsou klíče rozhraní API a přihlašovací údaje. Poznámka: Některá prostředí CI/CD mohou ukládat výstup spuštěných příkazů v protokolech. Je vhodné ověřit, co je napsané v těchto souborech protokolu a kdo má k protokolům přístup. Další informace naleznete v tématu Žádný výstupní formát.

Výstupní formát JSON (výchozí)

Následující příklad zobrazí seznam virtuálních počítačů ve vašich předplatných ve výchozím formátu JSON.

az vm list --output json

V následujícím výstupu byla pro zkrácení vynechána některá pole a nahrazeny identifikující informace.

[
  {
    "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"
        }
      ]
    },
          ...
          ...
          ...
]

Výstupní formát YAML

yaml vytiskne výstup jako YAML (formát serializace dat v prostém textu). YAML se obvykle čte snáze než JSON a na tento formát se snadno mapuje. Některé aplikace a příkazy rozhraní příkazového řádku přijímají YAML jako vstup konfigurace (místo formátu JSON).

az vm list --output yaml

V následujícím výstupu byla pro zkrácení vynechána některá pole a nahrazeny identifikující informace.

- 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
  ...
...

Výstupní formát tabulky

Ve formátu table se výstup vytiskne jako tabulka ASCII, což usnadňuje čtení a prohledávání. Vnořené objekty nejsou do výstupu tabulky zahrnuté, ale je možné je vyfiltrovat jako součást dotazu. Některá pole se také do tabulky dat nezahrnují. Tento formát je proto vhodný, pokud chcete rychlý přehled dat, ve kterém se dá snadno orientovat.

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

Pomocí parametru --query můžete upravit vlastnosti a sloupce, které chcete zobrazit ve výstupu příkazu. Následující příklad ukazuje, jak v příkazu list vybrat pouze název virtuálního počítače a název skupiny prostředků.

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

Poznámka:

Některé klíče se v zobrazení tabulky ve výchozím nastavení nevytisknou. Jsou to id, type a etag. Pokud je potřebujete zahrnout do výstupu, můžete využít překlíčovací funkci JMESPath ke změně názvu klíče a vyhnout se tak filtrování.

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

Další informace o použití dotazů k filtrování dat najdete v tématu Použití dotazů JMESPath v Azure CLI.

Výstupní formát TSV

Výstupní tsv formát vrátí hodnoty oddělené tabulátory a nový řádek bez dalšího formátování, klíčů nebo jiných symbolů. Tento formát umožňuje jednoduše využít výstup v dalších příkazech a nástrojích, které potřebují zpracovat text v určitém formátu. Podobně jako ve formátu table se ani ve formátu tsv netisknou vnořené objekty.

Pokud použijeme předchozí příklad s možností tsv, výstupem bude výsledek oddělený tabulátory.

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

Jedním z omezení výstupního formátu TSV je, že neexistuje záruka na řazení výstupu. Rozhraní příkazového řádku se snaží zachovat pořadí seřazením klíčů v abecedním kódu JSON odpovědi a následným tiskem hodnot pro výstup TSV. Neexistuje žádná záruka, že objednávka je vždy stejná, protože formát odpovědi služby Azure se může změnit.

Pokud chcete vynutit konzistentní řazení, budete muset použít --query parametr a formát seznamu s vícenásobným výběrem. Když příkaz rozhraní příkazového řádku vrátí jeden slovník JSON, použijte obecný formát [key1, key2, ..., keyN] k vynucení pořadí klíčů. U příkazů rozhraní příkazového řádku, které vracejí pole, použijte obecný formát [].[key1, key2, ..., keyN] k seřazení hodnot sloupců.

Pokud například chcete uspořádat informace zobrazené výše podle ID, umístění, skupiny prostředků a názvu virtuálního počítače:

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

Další příklad ukazuje, jak se výstup tsv dá předat dalším příkazům v Bashi. Dotaz se používá k filtrování výstupu a vynucení řazení, grep vybere položky s textem "RGD" a pak cut příkaz vybere čtvrté pole, které zobrazí název virtuálního počítače ve výstupu.

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

Výstupní tsv formát se často používá při přiřazování hodnot proměnným. Tento příklad získá ID aktivního předplatného a uloží ho do proměnné pro použití ve skriptu.

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

Další --query příklady parametrů najdete v tématu Dotazování výstupu příkazu Azure CLI.

Žádný výstupní formát

Některé výstupní informace o příkazech Azure CLI, které musíte chránit. Tady jsou čtyři příklady:

  • Hesla
  • připojovací řetězce
  • Tajemství
  • keys

Pokud chcete chránit tajné kódy a klíče při použití příkazů Azure CLI, zvolte jednu z těchto možností:

Možnost Výhoda Případ použití
--output none výstupní formát V konzole se budou zobrazovat citlivé informace. Pokud příkaz selže, stále se zobrazí chybové zprávy. 1. Použijte, když lze načíst výstup příkazu později.
2. Použijte, pokud nepotřebujete výstup.
3. Běžná volba, kdy se ke správě prostředků Azure používá spravovaná identita nebo instanční objekt.
--query Parametr Ukládá výstup do proměnné. 1. Použijte, když se výstup příkazu nedá načíst později.
2. Použijte, pokud potřebujete použít výstupní hodnotu příkazu ve skriptu.

Pozdější použití none a načtení informací o zabezpečení

Některé tajné kódy Azure je možné načíst později. Dobrým příkladem jsou tajné kódy uložené ve službě Azure Key Vault. V tomto příkladu vytvořte tajný klíč služby Azure Key Vault pomocí příkazu az keyvault secret set s --output none možností. Tajný kód můžete načíst později pomocí příkazu az keyvault secret show .

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

Použití --query a vrácení informací o zabezpečení do proměnné

Použití --query k ukládání výstupu do proměnné není technicky vzato výstupním formátem. Jedná se o řešení ochrany tajných kódů a je alternativou k použití --output none. Například při resetování přihlašovacích údajů instančního objektu se heslo nedá znovu načíst.

Resetování přihlašovacích údajů instančního objektu vracející výstup ve výchozím formátu JSON:

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

Výstup konzoly zobrazující nové heslo v konzole

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

Lepším řešením je vrátit citlivé informace do proměnné.

# 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"

Další příklady ukládání výstupu do proměnné najdete v tématu Úspěšné použití Azure CLI – předání hodnot jinému příkazu. Další informace o --query syntaxi parametrů najdete v tématu Dotazování výstupu příkazu Azure CLI.

Nastavení výchozího formátu výstupu

Příkazy Azure CLI poskytují výstup, který lze ovládat dvěma způsoby:

Výstupní ovládací prvek Výhoda Postupy
Globální nastavení Vyberte výchozí výstupní hodnotu, kterou používáte nejvíce, abyste nemuseli průběžně zadávat --output parametr pro každý referenční příkaz. Zadejte výchozí výstupní formát pomocí příkazu az config set.
Parametr příkazu Zadejte výstup na úrovni příkazu a poskytněte skriptům maximální flexibilitu. Pro každý referenční příkaz řídíte výstup konzoly a vstup proměnných. Přepište výchozí nastavení pomocí parametru referenčního --output příkazu.

Výchozí výstup pro Azure CLI je json. Nastavte výchozí výstup, na none který není potřeba výstup konzoly.

az config set core.output=none

Pomocí parametru --output můžete přepsat výchozí výstup libovolného referenčního příkazu Azure CLI. Tady je skript příkazů, které mění a testuje výstup příkazu:

# 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

Viz také