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