Ausgabeformate für Azure CLI-Befehle

Die Azure CLI verwendet JSON als Standardausgabeformat, aber es sind auch andere Formate möglich. Verwenden Sie den Parameter --output (--out oder -o) zum Formatieren der CLI-Ausgabe. Die Argumentwerte und Typen der Ausgabe lauten wie folgt:

--output BESCHREIBUNG
json JSON-Zeichenfolge. Dies ist die Standardeinstellung.
jsonc Farbiger JSON-Code
table ASCII-Tabelle mit Schlüsseln als Spaltenüberschriften
tsv Per Tabulator getrennte Werte ohne Schlüssel
yaml YAML, eine für Menschen lesbare Alternative zu JSON
yamlc Farbige YAML-Datei
none Keine andere Ausgabe als Fehler und Warnungen

Warnung

Verwenden Sie ein Ausgabeformat oder none speichern Sie die Befehlsausgabe in einer Variablen, um geheime Schlüssel wie API-Schlüssel und Anmeldeinformationen nicht verfügbar zu machen. Hinweis: Bestimmte CI/CD-Umgebungen können die Ausgabe der ausgeführten Befehle in Protokollen speichern. Es ist eine gute Praxis, sich zu vergewissern, was in diese Protokolldateien geschrieben wird und wer Zugang zu den Protokollen hat. Weitere Informationen finden Sie unter Ausgabeformat.

JSON-Ausgabeformat (Standard)

Im folgenden Beispiel wird die Liste mit den virtuellen Computern Ihrer Abonnements im JSON-Standardformat angezeigt.

az vm list --output json

In der folgenden Ausgabe wurden einige Felder aus Platzgründen weggelassen, und identifizierende Informationen wurden ersetzt.

[
  {
    "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-Ausgabeformat

Das Format yaml gibt die Ausgabe als YAML (ein Nur-Text-Datenserialisierungsformat) aus. YAML ist in der Regel leichter lesbar als JSON und lässt sich problemlos diesem Format zuordnen. Einige Anwendungen und CLI-Befehle verwenden als Konfigurationseingabe YAML anstelle von JSON.

az vm list --output yaml

In der folgenden Ausgabe wurden einige Felder aus Platzgründen weggelassen, und identifizierende Informationen wurden ersetzt.

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

Tabellenausgabeformat

Beim table-Format wird die Ausgabe als ASCII-Tabelle zurückgegeben, die einfach gelesen und überprüft werden kann. Geschachtelte Objekte sind in der Tabellenausgabe nicht enthalten, können jedoch im Rahmen einer Abfrage gefiltert werden. Einige Felder sind nicht in der Tabelle enthalten, daher ist dieses Format am besten geeignet, wenn Sie eine schnelle und von Menschen durchsuchbare Übersicht über Daten benötigen.

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

Sie können den Parameter --query verwenden, um die Eigenschaften und Spalten anzupassen, die Sie in der Listenausgabe anzeigen möchten. Im folgenden Beispiel wird veranschaulicht, wie Sie im Befehl list nur den VM-Namen und den Ressourcengruppennamen auswählen.

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

Hinweis

Einige Schlüssel werden standardmäßig nicht in der Tabellenansicht ausgegeben. Hierbei handelt es sich um id, type, und etag. Wenn Sie diese in der Ausgabe benötigen, können Sie die JMESPath-Funktion zum Erstellen neuer Schlüssel verwenden, um den Namen des Schlüssels zu ändern und das Filtern zu vermeiden.

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

Weitere Informationen zum Verwenden von Abfragen für die Filterung von Daten finden Sie unter Verwenden von JMESPath-Abfragen mit der Azure CLI.

TSV-Ausgabeformat

Das tsv-Ausgabeformat gibt durch Tabstopp oder Zeilenumbruch getrennte Werte ohne zusätzliche Formatierung, Schlüssel oder andere Symbole zurück. Mit diesem Format ist es leicht, die Ausgabe in anderen Befehlen und Tools zu nutzen, in denen der Text verarbeitet werden muss. Wie beim table-Format gibt tsv keine geschachtelten Objekte aus.

Wenn das obige Beispiel mit der Option tsv verwendet wird, wird das Ergebnis mit Tabulatortrennung ausgegeben.

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

Eine Einschränkung des TSV-Ausgabeformats besteht darin, dass es keine Garantie in Bezug auf die Ausgabereihenfolge gibt. Die CLI behält nach Möglichkeit die Reihenfolge bei, indem sie Schlüssel in der JSON-Antwort alphabetisch sortiert und dann ihre sortierten Werte für die TSV-Ausgabe ausgibt. Es gibt keine Garantie dafür, dass die Bestellung immer identisch ist, da sich das Azure-Dienstantwortformat ändern kann.

Zum Erzwingen einer konsistenten Reihenfolge müssen Sie den Parameter --query und das Format für die Mehrfachauswahl verwenden. Gibt ein CLI-Befehl ein einzelnes JSON-Wörterbuch zurück, erzwingen Sie mit dem allgemeinen Format [key1, key2, ..., keyN] eine Schlüsselreihenfolge. Verwenden Sie für CLI-Befehle, die ein Array zurückgeben, das allgemeine Format [].[key1, key2, ..., keyN], um Spaltenwerte zu sortieren.

So sortieren Sie beispielsweise die oben angezeigten Informationen nach ID, Standort, Ressourcengruppe und VM-Name:

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

Das nächste Beispiel zeigt, wie die tsv-Ausgabe an andere Befehle in Bash übergeben werden können. Mit der Abfrage wird die Ausgabe gefiltert und die Sortierung erzwungen. grep wählt Elemente aus, die den Text „RGD“ enthalten, und anschließend wird mit dem Befehl cut das vierte Feld für die Anzeige des Namens des virtuellen Computers in der Ausgabe ausgewählt.

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

Das tsv-Ausgabeformat wird häufig beim Zuweisen von Werten zu Variablen verwendet. In diesem Beispiel wird die aktive Abonnement-ID aufgerufen und in einer Variablen für die Verwendung in einem Skript gespeichert.

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

Weitere --query Parameterbeispiele finden Sie unter Abfragen der Azure CLI-Befehlsausgabe.

Ausgabeformat „Keiner“

Einige Azure CLI-Befehle geben Ausgabeinformationen ein, die Sie schützen müssen. Es folgen vier Beispiele:

  • Kennwörter
  • Verbindungszeichenfolgen
  • secrets
  • keys

Um geheime Schlüssel und Schlüssel bei Verwendung von Azure CLI-Befehlen zu schützen, wählen Sie eine der folgenden Optionen aus:

Option Vorteil Anwendungsfälle
--output none-Ausgabeformat Verhindert, dass vertrauliche Informationen in der Konsole angezeigt werden. Wenn Ihr Befehl fehlschlägt, erhalten Sie weiterhin Fehlermeldungen. 1. Wird verwendet, wenn die Befehlsausgabe zu einem späteren Zeitpunkt abgerufen werden kann.
2. Wird verwendet, wenn Sie keine Ausgabe benötigen.
3. Eine häufige Wahl, wenn eine verwaltete Identität oder ein Dienstprinzipal zum Verwalten von Azure-Ressourcen verwendet wird.
--query-Parameter Speichert die Ausgabe in einer Variablen. 1. Wird verwendet, wenn die Befehlsausgabe zu einem späteren Zeitpunkt nicht abgerufen werden kann.
2. Verwenden Sie diesen Wert, wenn Sie einen Befehlsausgabewert in einem Skript verwenden müssen.

Verwenden Sie none und rufen Sie Sicherheitsinformationen zu einem späteren Zeitpunkt ab

Einige geheime Schlüssel für Azure können zu einem späteren Zeitpunkt abgerufen werden. Ein gutes Beispiel sind geheime Schlüssel, die in Azure Key Vault gespeichert sind. Erstellen Sie in diesem Beispiel einen geheimen Azure Key Vault-Schlüssel mit dem az keyvault secret set mit der --output none-Option. Sie können den geheimen Schlüssel später mithilfe des Befehls az keyvault secret show abrufen.

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

Verwenden von --query und Zurückgeben von Sicherheitsinformationen an eine Variable

Die Verwendung der --query-Ausgabe in einer Variablen ist technisch kein Ausgabeformat. Es ist eine Lösung zum Schutz von Geheimnissen und ist eine Alternative zur Verwendung von --output none. Wenn Sie beispielsweise eine Dienstprinzipalanmeldeinformationen zurücksetzen, kann das Kennwort nicht erneut abgerufen werden.

Zurücksetzen einer Dienstprinzipalanmeldeinformation, welche die Ausgabe im standardmäßigen JSON-Format zurückgibt:

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

Konsolenausgabe mit dem neuen Kennwort in der Konsole.

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

Eine bessere Lösung besteht darin, vertrauliche Informationen an eine Variable zurückzugeben.

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

Weitere Beispiele zum Speichern der Ausgabe in einer Variablen finden Sie unter Erfolgreiche Verwendung der Azure CLI – Übergeben von Werten an einen anderen Befehl. Weitere Informationen zur --query-Parametersyntax finden Sie unter Abfragen der Azure CLI-Befehlsausgabe.

Festlegen des Standardausgabeformats

Azure CLI-Befehle bieten eine Ausgabe, die auf zwei Arten gesteuert werden kann:

Ausgabesteuerelement Vorteil Vorgehensweise
Globale Einstellung festlegen Wählen Sie einen Standardausgabewert aus, den Sie am häufigsten verwenden, damit Sie keinen --output-Parameter für jeden Verweisbefehl angeben müssen. Geben Sie ein Standardausgabeformat mit az config set an.
Command-Parameter Geben Sie die Ausgabe auf Befehlsebene an und geben Sie Ihren Skripts maximale Flexibilität. Sie steuern die Konsolenausgabe und Variableneingabe für jeden Verweisbefehl. Überschreiben Sie die Standardeinstellung mithilfe des --output-Parameters eines Verweisbefehls.

Das Standardausgabeformat für Azure CLI ist json. Legen Sie die Standardausgabe auf none fest, wenn die Konsolenausgabe nicht benötigt wird.

az config set core.output=none

Sie können die Standardausgabe eines beliebigen Azure CLI-Referenzbefehls überschreiben, indem Sie den --output-Parameter verwenden. Hier sehen Sie ein Skript mit Befehlen, welche die Ausgabe von Befehlen ändern und 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

Siehe auch