Uitvoerindelingen voor Azure CLI-opdrachten

De Azure CLI gebruikt JSON als standaarduitvoerindeling, maar biedt ook andere indelingen. Gebruik de parameter --output (--out of -o) om de CLI-uitvoer op te maken. De argumentwaarden en -typen van de uitvoer zijn:

--output Beschrijving
json JSON-tekenreeks. Deze instelling is de standaardinstelling
jsonc Gekleurde JSON
table ASCII-tabel met sleutels als kolomkoppen
tsv Door tabs gescheiden waarden, geen sleutels.
yaml YAML, een door mensen leesbaar alternatief voor JSON
yamlc Gekleurde YAML
none Geen andere uitvoer dan fouten en waarschuwingen

Waarschuwing

Gebruik een uitvoerindeling van de uitvoer van none opdrachten in een variabele om te voorkomen dat geheimen, zoals API-sleutels en referenties, worden weergegeven. Opmerking: Bepaalde CI/CD-omgevingen kunnen de uitvoer van de uitgevoerde opdrachten opslaan in logboeken. Het is een goed idee om te bevestigen wat er in deze logboekbestanden is geschreven en wie toegang heeft tot de logboeken. Zie Geen uitvoerindeling voor meer informatie.

JSON-uitvoerindeling (standaard)

In het volgende voorbeeld wordt de lijst met virtuele machines in uw abonnementen weergegeven in de standaard JSON-indeling.

az vm list --output json

Kortheidshalve zijn in de volgende uitvoer bepaalde velden weggelaten. Ook zijn identificatiegegevens vervangen.

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

De uitvoerindeling YAML

In de indeling yaml wordt de uitvoer gegenereerd als YAML, een serialisatie-indeling voor gegevens die bestaan uit tekst zonder opmaak. YAML is doorgaans gemakkelijker te lezen dan JSON en kan eenvoudig worden omgezet in die indeling. Sommige toepassingen en CLI-opdrachten gebruiken YAML als configuratie-invoer, in plaats van JSON.

az vm list --output yaml

Kortheidshalve zijn in de volgende uitvoer bepaalde velden weggelaten. Ook zijn identificatiegegevens vervangen.

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

Tabeluitvoer

De table-indeling genereert uitvoer als een ASCII-tabel, waardoor deze eenvoudig te lezen en te scannen is. Tabeluitvoer bevat geen geneste objecten, maar hierop kan wel worden gefilterd met behulp van een query. In de tabel zijn niet alle velden opgenomen. Deze indeling is dan ook vooral geschikt als u een snel, handmatig goed doorzoekbaar overzicht van uw gegevens nodig hebt.

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

U kunt de parameter --query gebruiken om de eigenschappen en kolommen die u in de lijstuitvoer wilt weergeven, aan te passen. Het volgende voorbeeld laat zien hoe u slechts de VM-naam en de naam van de resourcegroep selecteert in de opdracht list.

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

Notitie

Sommige sleutels worden niet standaard opgenomen in de tabelweergave. Dit zijn de sleutels id, type en etag. Als u deze sleutels wel in de uitvoer wilt opnemen, kunt u de JMESPath-functie voor het opnieuw instellen van sleutels gebruiken om de sleutelnaam te wijzigen en zo te voorkomen dat u moet filteren.

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

Raadpleeg JMESPath-query's gebruiken met de Azure CLI voor meer informatie over het gebruik van query's om gegevens te filteren.

TSV-uitvoer

De tsv uitvoerindeling retourneert door tabs en nieuwe regels gescheiden waarden zonder extra opmaak, toetsen of andere symbolen. Deze indeling maakt het eenvoudig om de uitvoer op te nemen in andere opdrachten en hulpmiddelen die de tekst in enige vorm moeten verwerken. Net als de table-indeling genereert tsv geen geneste objecten.

Als u het voorgaande voorbeeld gebruikt met de optie tsv, worden de resultaten uitgevoerd gescheiden door tabs.

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

Een beperking van de TSV-uitvoerindeling is dat er geen garantie is voor uitvoervolgorde. De CLI doet er alles aan om de volgorde te behouden door sleutels in de antwoord-JSON alfabetisch te sorteren en vervolgens hun waarden af te drukken op volgorde van TSV-uitvoer. Er is geen garantie dat de bestelling altijd identiek is, omdat de azure-serviceantwoordindeling kan worden gewijzigd.

Als u consistente volgorde wilt afdwingen, moet u de --query parameter en de lijstindeling met meerdere selecties gebruiken. Wanneer een CLI-opdracht één JSON-woordenlijst retourneert, gebruikt u de algemene indeling [key1, key2, ..., keyN] om een sleutelvolgorde af te dwingen. Voor CLI-opdrachten die een matrix retourneren, gebruikt u de algemene indeling [].[key1, key2, ..., keyN] om kolomwaarden te ordenen.

Als u bijvoorbeeld de informatie wilt orden die hierboven wordt weergegeven op id, locatie, resourcegroep en VM-naam:

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

Het volgende voorbeeld laat zien hoe tsv-uitvoer kan worden doorgesluisd naar andere opdrachten in bash. De query wordt gebruikt voor het filteren van uitvoer en geforceerde volgorde, grep selecteert items met de tekst 'RGD' erin en vervolgens selecteert de cut opdracht het vierde veld om de naam van de virtuele machine in uitvoer weer te geven.

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

De tsv uitvoerindeling wordt vaak gebruikt bij het toewijzen van waarden aan variabelen. In dit voorbeeld wordt de actieve abonnements-id opgehaald en opgeslagen in een variabele voor gebruik in een script.

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

Zie De uitvoer van azure CLI-opdrachten opvragen voor meer --query parametervoorbeelden.

Geen uitvoerindeling

Sommige Azure CLI-opdrachten bevatten uitvoergegevens die u moet beveiligen. Hier volgen vier voorbeelden:

  • wachtwoorden
  • verbindingsreeksen
  • geheimen
  • keys

Als u geheimen en sleutels wilt beveiligen wanneer u Azure CLI-opdrachten gebruikt, kiest u een van de volgende opties:

Optie Voordeel Gebruiksscenario
--output none Uitvoerindeling Hiermee wordt gevoelige informatie niet weergegeven in uw console. Als uw opdracht mislukt, ontvangt u nog steeds foutberichten. 1. Gebruik deze opdrachtuitvoer op een later tijdstip.
2. Gebruik deze functie wanneer u geen uitvoer nodig hebt.
3. Een algemene keuze wanneer een beheerde identiteit of een service-principal wordt gebruikt voor het beheren van Azure-resources.
--query Parameter Slaat uitvoer op in een variabele. 1. Gebruik deze opdrachtuitvoer niet op een later tijdstip.
2. Gebruik deze opdracht wanneer u een uitvoerwaarde van een opdracht in een script moet gebruiken.

Beveiligingsgegevens op een later tijdstip gebruiken none en ophalen

Sommige Azure-geheimen kunnen later worden opgehaald. Een goed voorbeeld is geheimen die zijn opgeslagen in Azure Key Vault. In dit voorbeeld maakt u een Azure Key Vault-geheim met behulp van az keyvault secret set met de --output none optie. U kunt het geheim later ophalen met behulp van de opdracht az keyvault secret show .

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

Beveiligingsgegevens gebruiken --query en retourneren aan een variabele

Het gebruik van het opslaan van --query uitvoer in een variabele is technisch gezien geen uitvoerindeling. Het is een oplossing voor het beveiligen van geheimen en is een alternatief voor het gebruik van --output none. Wanneer u bijvoorbeeld de referenties van een service-principal opnieuw instelt, kan het wachtwoord niet opnieuw worden opgehaald.

Stel een service-principalreferentie opnieuw in die uitvoer retourneert in de standaard-JSON-indeling:

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

Console-uitvoer met het nieuwe wachtwoord in de console.

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

Een betere oplossing is het retourneren van gevoelige informatie aan een variabele.

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

Zie De Azure CLI gebruiken om waarden door te geven aan een andere opdracht voor meer voorbeelden over het opslaan van uitvoer naar een variabele. Zie De uitvoer van azure CLI-opdrachten opvragen voor meer informatie over --query de syntaxis van parameters.

De standaarduitvoerindeling instellen

Azure CLI-opdrachten bieden uitvoer die op twee manieren kan worden beheerd:

Uitvoerbesturing Voordeel Uitleg
Globale instelling Selecteer een standaarduitvoerwaarde die u het meest gebruikt, zodat u niet voortdurend een --output parameter hoeft op te geven voor elke verwijzingsopdracht. Geef een standaarduitvoerindeling op met az config set.
Opdrachtparameter Geef uitvoer op opdrachtniveau op en geef uw scripts maximale flexibiliteit. U bepaalt de uitvoer van de console en de variabele invoer voor elke referentieopdracht. Overschrijf de standaardinstelling met behulp van de parameter van --output een verwijzingsopdracht.

De standaarduitvoer voor de Azure CLI is json. Stel de standaarduitvoer in op none wanneer console-uitvoer niet nodig is.

az config set core.output=none

U kunt de standaarduitvoer van elke Azure CLI-referentieopdracht overschrijven met behulp van de --output parameter. Hier volgt een script met opdrachten die de uitvoer van de opdracht wijzigen en testen:

# 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

Zie ook