Formati di output per i comandi dell'interfaccia della riga di comando di Azure

L'interfaccia della riga di comando di Azure usa JSON come formato di output predefinito, ma offre anche altri formati. Usare il parametro --output (--out o -o) per formattare l'output dell'interfaccia della riga di comando. I valori degli argomenti e i tipi di output sono i seguenti:

--output Descrizione
json Stringa JSON. Questa è l'impostazione predefinita
jsonc Stringa JSON colorata
table Tabella ASCII con chiavi come intestazioni di colonna
tsv Valori delimitati da tabulazioni, senza chiavi
yaml YAML, un'alternativa leggibile a JSON
yamlc YAML colorato
none Nessun output oltre a errori e avvisi

Avviso

Usare un formato di output di o archiviare l'output dei none comandi in una variabile per evitare di esporre segreti, ad esempio chiavi API e credenziali. Nota: alcuni ambienti CI/CD possono archiviare l'output dei comandi eseguiti nei log. È consigliabile verificare ciò che viene scritto in tali file di log e chi può accedere ai log. Per altre informazioni, vedere Formato di output none.

Formato di output JSON (impostazione predefinita)

L'esempio seguente mostra l'elenco di macchine virtuali nelle proprie sottoscrizioni nel formato JSON predefinito.

az vm list --output json

Nell'output seguente sono stati omessi alcuni campi per brevità e le informazioni di identificazione sono state sostituite.

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

Formato di output YAML

Il formato yaml stampa l'output come YAML, un formato di serializzazione dei dati in testo normale. YAML tende a essere più facile da leggere rispetto a JSON, a cui può comunque essere eseguito facilmente il mapping. Alcune applicazioni e alcuni comandi dell'interfaccia della riga di comando accettano YAML come input di configurazione invece di JSON.

az vm list --output yaml

Nell'output seguente sono stati omessi alcuni campi per brevità e le informazioni di identificazione sono state sostituite.

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

Formato dell'output della tabella

Il formato table stampa l'output come tabella ASCII, facilitando la lettura e l'analisi. Gli oggetti annidati non sono inclusi nell'output della tabella, ma possono comunque essere filtrati come parte di una query. Alcuni campi non sono inclusi nella tabella, quindi questo formato è ottimale quando si vuole una panoramica rapida dei dati nella quale gli utenti possono eseguire ricerche.

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

È possibile usare il parametro --query per personalizzare le proprietà e le colonne che si desidera mostrare nell'output. L'esempio seguente mostra come selezionare solo il nome della macchina virtuale e il nome del gruppo di risorse nel comando list.

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

Nota

Per impostazione predefinita, alcune chiavi non vengono stampate nella visualizzazione tabella. Si tratta di id, type e etag. Se è necessario includerle nell'output, è possibile usare la funzionalità JMESPath per il reinserimento delle chiavi in modo da modificare il nome delle chiavi ed evitare i filtri.

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

Per altre informazioni sull'uso delle query per filtrare i dati, vedere Usare query JMESPath con l'interfaccia della riga di comando di Azure.

Formato TSV dell'output

Il tsv formato di output restituisce valori separati da tabulazione e nuova riga senza formattazione aggiuntiva, chiavi o altri simboli. Questo formato consente di usare agevolmente l'output in altri comandi e strumenti che devono elaborare il testo in una determinata forma. Come il formato table, tsv non stampa gli oggetti annidati.

Se si usa l'esempio precedente con l'opzione tsv si genera il risultato separato da tabulazioni.

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

Una restrizione del formato di output TSV è che non esiste alcuna garanzia relativa all'ordinamento dell'output. L'interfaccia della riga di comando si impegna al meglio per mantenere l'ordinamento ordinando le chiavi nella risposta JSON in ordine alfabetico e quindi stampando i valori in ordine di output TSV. Non esiste alcuna garanzia che l'ordine sia sempre identico, poiché il formato di risposta del servizio di Azure può cambiare.

Per applicare un ordinamento coerente, è necessario usare il parametro --query e il formato dell'elenco a selezione multipla. Quando un comando dell'interfaccia della riga di comando restituisce un singolo dizionario JSON, usare il formato generico [key1, key2, ..., keyN] per forzare l'ordinamento delle chiavi. Per i comandi dell'interfaccia della riga di comando che restituiscono una matrice, usare il formato [].[key1, key2, ..., keyN] generale per ordinare i valori delle colonne.

Ad esempio, per ordinare le informazioni visualizzate in precedenza in base all'ID, alla località, al gruppo di risorse e al nome della macchina virtuale:

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

L'esempio seguente illustra come l'output tsv possa essere inviato tramite pipe ad altri comandi in Bash. La query viene usata per filtrare l'output e forzare l'ordinamento. grep seleziona gli elementi che contengono il testo "RGD" e quindi il comando cut seleziona il quarto campo per mostrare il nome della macchina virtuale nell'output.

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

Il tsv formato di output viene spesso usato quando si assegnano valori alle variabili. Questo esempio ottiene l'ID sottoscrizione attivo e lo archivia in una variabile da usare in uno script.

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

Per altri --query esempi di parametri, vedere Come eseguire query nell'output dei comandi dell'interfaccia della riga di comando di Azure.

Formato di output none

Alcuni comandi dell'interfaccia della riga di comando di Azure generano informazioni che è necessario proteggere. Ecco quattro esempi:

  • password
  • Stringhe di connessione
  • chiavi private
  • keys

Per proteggere segreti e chiavi quando si usano i comandi dell'interfaccia della riga di comando di Azure, scegliere una delle opzioni seguenti:

Opzione Vantaggio Caso d'uso
--output none formato di output Impedisce la visualizzazione delle informazioni riservate nella console. Se il comando non riesce, si riceveranno comunque messaggi di errore. 1. Usare quando l'output del comando può essere recuperato in un secondo momento.
2. Usare quando non è necessario l'output.
3. Scelta comune quando viene usata un'identità gestita o un'entità servizio per gestire le risorse di Azure.
parametro --query Archivia l'output in una variabile. 1. Usare quando l'output del comando non può essere recuperato in un secondo momento.
2. Usare quando è necessario usare un valore di output del comando in uno script.

Usare none e recuperare le informazioni di sicurezza in un secondo momento

Alcuni segreti di Azure possono essere recuperati in un secondo momento. Un buon esempio è costituito dai segreti archiviati in Azure Key Vault. In questo esempio creare un segreto di Azure Key Vault usando az keyvault secret set con l'opzione --output none . È possibile recuperare il segreto in un secondo momento usando il comando az keyvault secret show .

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

Usare --query e restituire informazioni di sicurezza a una variabile

L'uso di per archiviare l'output in una variabile non è tecnicamente un formato di --query output. Si tratta di una soluzione per proteggere i segreti ed è un'alternativa all'uso di --output none. Ad esempio, quando si reimpostano le credenziali di un'entità servizio, la password non può essere recuperata di nuovo.

Reimpostare una credenziale dell'entità servizio che restituisce l'output nel formato JSON predefinito:

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

Output della console che mostra la nuova password nella console.

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

Una soluzione migliore consiste nel restituire informazioni riservate a una variabile.

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

Per altri esempi sull'archiviazione dell'output in una variabile, vedere Usare correttamente l'interfaccia della riga di comando di Azure: passare i valori a un altro comando. Per altre informazioni sulla sintassi dei parametri, vedere Come eseguire query sull'output --querydei comandi dell'interfaccia della riga di comando di Azure.

Configurare il formato di output predefinito

I comandi dell'interfaccia della riga di comando di Azure forniscono output che possono essere controllati in due modi:

Controllo di output Vantaggio Procedure
Impostazione globale Selezionare un valore di output predefinito che si usa di più in modo da non dover fornire continuamente un --output parametro per ogni comando di riferimento. Specificare un formato di output predefinito usando az config set.
parametro Command Specificare l'output a livello di comando e offrire agli script la massima flessibilità. È possibile controllare l'output della console e l'input delle variabili per ogni comando di riferimento. Eseguire l'override dell'impostazione predefinita usando il parametro di un comando di --output riferimento.

L'output predefinito per l'interfaccia della riga di comando di Azure è json. Impostare l'output predefinito su none quando l'output della console non è necessario.

az config set core.output=none

È possibile sovrascrivere l'output predefinito di qualsiasi comando di riferimento dell'interfaccia della riga di comando di Azure usando il --output parametro . Ecco uno script di comandi che modificano e testano l'output dei comandi:

# 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

Vedi anche