Delen via


Uitvoerindelingen voor Azure CLI-opdrachten

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

--uitvoer Beschrijving
json JSON-tekenreeks. Deze instelling is de standaardinstelling
jsonc Gekleurde JSON
table ASCII-tabel met toetsen 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

Als u wilt voorkomen dat geheimen, zoals API-sleutels en referenties, worden weergegeven, gebruikt u een uitvoerindeling van of slaat u de uitvoer van none opdrachten op in een variabele. Notitie: Bepaalde CI/CD-omgevingen kunnen de uitvoer van de uitgevoerde opdrachten opslaan in logboeken. Het is een goed idee om de inhoud van deze logboekbestanden te bevestigen 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 makkelijker te lezen dan JSON en kan naar dat formaat worden omgezet. Sommige toepassingen en Azure CLI-opdrachten nemen 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
  ...
...

Tabeluitvoerformaat

De table-indeling genereert uitvoer als een ASCII-tabel, waardoor deze eenvoudig te lezen en te scannen is. Geneste objecten zijn niet opgenomen in de tabeluitvoer, maar kunnen nog steeds worden gefilterd als onderdeel 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

Opmerking

Sommige sleutels worden niet standaard afgedrukt in de tabelweergave. Deze sleutels zijn onder andere id, typeen etag. Als u deze nodig hebt in uw uitvoer, kunt u de functie JMESPath opnieuw versleutelen gebruiken om de sleutelnaam te wijzigen en filteren te voorkomen.

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

De tsv uitvoerindeling retourneert waarden die door tabbladen en nieuwe regels worden gescheiden, zonder extra opmaak, sleutels 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 drukt tsv geen geneste objecten af.

Als u het voorgaande voorbeeld gebruikt met de optie tsv, wordt het tab-gescheiden resultaat uitgevoerd.

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 het ordenen van uitvoer. De Azure 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 indeling van de lijst met meerdere selecties gebruiken. Wanneer een Azure CLI-opdracht één JSON-woordenlijst retourneert, gebruikt u de algemene indeling [key1, key2, ..., keyN] om een sleutelvolgorde af te dwingen. Voor Azure CLI-opdrachten die een matrix retourneren, gebruikt u de algemene indeling [].[key1, key2, ..., keyN] om kolomwaarden te ordenen.

Als u bijvoorbeeld deze informatie wilt ordenen 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

In het volgende voorbeeld ziet u hoe u tsv uitvoer naar andere opdrachten in Bash kunt pijpen. De query wordt gebruikt voor het filteren van uitvoer en geforceerde volgorde, grep selecteert items met 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 --query voor meer parametervoorbeelden.

Geen uitvoerindeling

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

  • Wachtwoorden
  • Aansluitstrengen
  • Geheimen
  • Sleutels

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

Optie Voordeel Gebruiksituatie
--output none Uitvoerindeling Hiermee wordt gevoelige informatie niet weergegeven in uw console. Als uw opdracht mislukt, ontvangt u nog steeds foutberichten. 1. Gebruik als de opdrachtuitvoer kan worden opgehaald 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 wanneer de opdrachtuitvoer niet kan worden opgehaald op een later tijdstip.
2. Gebruik dit commando als u een uitvoerwaarde van een opdracht in een script moet gebruiken.

Beveiligingsgegevens op een later tijdstip ophalen

Sommige Azure-geheimen kunnen later worden opgehaald. Een voorbeeld hiervan zijn 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 opslaan in 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 inloggegevens van een service-principal opnieuw instelt, kan het wachtwoord niet opnieuw worden opgehaald.

Stel een service-principalreferentie opnieuw in en retourneer de uitvoer 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 --query voor meer informatie over de syntaxis van parameters.

De standaarduitvoerindeling instellen

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

Uitvoerbesturing Voordeel Handleiding
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 --output parameter van een referentiecommando.

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