Azure CLI-Syntaxunterschiede zwischen Bash, PowerShell und Cmd

Azure CLI-Befehle können in Bash-, PowerShell- und Windows-Befehlsshellumgebungen (Cmd) ausgeführt werden. Es gibt jedoch geringfügige Unterschiede bei der Skripterstellung. In diesem Tutorialschritt erfahren Sie, wie Sie Ihr erstes Azure-Speicherkonto erstellen und Parameterwerte für alle drei Umgebungen formatieren.

Voraussetzungen

  • Sie haben die erforderlichen Schritte zum Vorbereiten Ihrer Umgebung ausgeführt.
  • Sie haben Zugriff auf eine Ressourcengruppe mit der Berechtigung contributor oder höheren Berechtigungen auf Ressourcengruppenebene.

Beachten von Zeilenfortsetzungszeichen

Die meisten Azure CLI-Dokumentationen werden mithilfe von Azure Cloud Shell in Bash geschrieben und getestet. Einer der ersten Punkte, die Sie beim Kopieren der Azure CLI-Syntax beachten sollten, ist die Überprüfung der Zeilenfortsetzungszeichen für Ihre ausgewählte Umgebung, da diese nicht austauschbar sind.

Environment Zeilenfortsetzungszeichen
Bash Umgekehrter Schrägstrich (\)
PowerShell Backtick (`)
Cmd Caretzeichen (^)

Tipp

Die Schaltfläche Kopieren in der oberen rechten Ecke von Azure CLI-Codeblöcken entfernt entwurfsbedingt den umgekehrten Schrägstrich (\) und den Backtick (`). Wenn Sie einen formatierten Codeblock kopieren möchten, verwenden Sie die Tastatur oder Maus, um das Beispiel auszuwählen und zu kopieren.

Grundlegendes zu den Syntaxunterschieden beim Verwenden von Variablen

Die Syntax für die Verwendung von Variablen variiert geringfügig zwischen Umgebungen. Hier ist ein Vergleich:

Anwendungsfall Bash PowerShell Cmd
Variable erstellen variableName=varValue $variableName="varValue" set variableName=varValue
Verwenden einer Variablen als Parameterwert variableName $variableName %variableName%
Verwenden einer Variablen im Parameter --query '$variableName' '$variableName' '$variableName'

Es gibt verschiedene Möglichkeiten, Variableninformationen an den Konsolenbildschirm zurückzugeben, aber echo funktioniert in den meisten Fällen. Hier ist ein Vergleich:

  • Bash: echo $varResourceGroup
  • PowerShell: echo $varResourceGroup
  • Cmd: echo %varResourceGroup%

In Schritt 3 (Auffüllen der Variablen für die Verwendung in Skripts) arbeiten Sie ausführliche Beispiele für die Variablensyntax durch.

Informationen zu Unterschieden bei Anführungszeichen zwischen Umgebungen

Jeder Azure CLI-Parameter ist eine Zeichenfolge. In jeder Umgebung gelten jedoch eigene Regeln für die Behandlung von einfachen und doppelten Anführungszeichen, Leerzeichen und Parameterwerten.

Zeichenfolgenwert Azure CLI PowerShell Cmd
Text 'text' oder "text" 'text' oder "text" "text"
Anzahl \`50\` ``50`` `50`
Boolean \`true\` ``false`` "true"
Datum '2021-11-15' '2021-11-15' '2021-11-15'
JSON '{"key":"value"}' or "{"key":"value"}" '{"key":"value"}' "{"key":"value"}"

Viele Azure CLI-Parameter akzeptieren eine durch Leerzeichen getrennte Liste von Werten. Dies wirkt sich auf die Anführungszeichen aus.

  • Durch Leerzeichen getrennte Liste ohne Anführungszeichen: --parameterName firstValue secondValue
  • Durch Leerzeichen getrennte Liste mit Anführungszeichen: --parameterName "firstValue" "secondValue"
  • Werte mit einem Leerzeichen: --parameterName "value1a value1b" "value2a value2b" "value3"

Wenn Sie nicht sicher sind, wie Ihre Zeichenfolge von Ihrer Umgebung ausgewertet wird, geben Sie den Wert einer Zeichenfolge an Ihre Konsole zurück, oder verwenden Sie --debug wie unter Debuggen von Azure CLI-Referenzbefehlen erläutert.

Erstellen eines Speicherkontos, um das Gelernte anzuwenden

Im Rest dieses Tutorialschritts werden Regeln zu Anführungszeichen in Azure CLI-Befehlen veranschaulicht. Dabei wird die unter Vorbereiten der Umgebung für die Azure CLI erstellte Ressourcengruppe verwendet. Ersetzen Sie <msdocs-tutorial-rg-00000000> durch den Namen Ihrer Ressourcengruppe.

Erstellen Sie ein Azure-Speicherkonto für dieses Tutorial. In diesem Beispiel wird dem Namen des Speicherkontos eine zufällige ID zugewiesen. Wenn Sie jedoch einen anderen Namen verwenden möchten, lesen Sie die Informationen zu Regeln für Speicherkontonamen in der Speicherkontoübersicht.

Im nächsten Skriptbeispiel wird die umgebungsspezifische Syntax für Folgendes veranschaulicht:

  • Zeilenfortsetzung
  • Variablenverwendung
  • Zufällige Bezeichner
  • echo-Befehl
# Variable block
let "randomIdentifier=$RANDOM*$RANDOM"
location=eastus
resourceGroup="<msdocs-tutorial-rg-00000000>"
storageAccount="msdocssa$randomIdentifier"

# Create a storage account.
echo "Creating storage account $storageAccount in resource group $resourceGroup"
az storage account create --name $storageAccount \
                          --resource-group $resourceGroup \
                          --location $location \
                          --sku Standard_RAGRS \
                          --kind StorageV2 \
                          --output json

Die Azure CLI gibt mehr als 100 Zeilen JSON-Code als Ausgabe zurück, wenn ein neues Speicherkonto erstellt wird. In der folgenden JSON-Wörterbuchausgabe wurden Felder aus Platzgründen weggelassen:

{
"accessTier": "Hot",
"allowBlobPublicAccess": false,
"creationTime": "yyyy-mm-ddT19:14:26.962501+00:00",
"enableHttpsTrafficOnly": true,
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ msdocs-tutorial-rg-00000000/providers/Microsoft.Storage/storageAccounts/msdocssa00000000",
"keyCreationTime": {
  "key1": "yyyy-mm-ddT19:14:27.103127+00:00",
  "key2": "yyyy-mm-ddT19:14:27.103127+00:00"
},
"kind": "StorageV2",
"location": "eastus",
"name": "msdocssa00000000",
"primaryEndpoints": {
  "blob": "https://msdocssa00000000.blob.core.windows.net/"
},
"primaryLocation": "eastus",
"provisioningState": "Succeeded",
"resourceGroup": "msdocs-tutorial-rg-00000000",
"sku": {
  "name": "Standard_RAGRS",
  "tier": "Standard"
},
"statusOfPrimary": "available",
"statusOfSecondary": "available",
"tags": {},
"type": "Microsoft.Storage/storageAccounts"
}

Erstellen von Tags zum Üben der Unterschiede bei Anführungszeichen

Fügen Sie mithilfe von az storage account update Tags hinzu, um Ihr Speicherkonto zu identifizieren und mehr über die Unterschiede bei Anführungszeichen zu erfahren. Diese Skriptbeispiele veranschaulichen die umgebungsspezifische Syntax für Folgendes:

  • Werte, die Leerzeichen enthalten
  • Anführungszeichen für Leerzeichen
  • Verwenden von Escapezeichen für Sonderzeichen
  • Variablen verwenden

Der Parameter --tags akzeptiert eine durch Leerzeichen getrennte Liste von Schlüssel-Wert-Paaren. Ersetzen Sie <msdocs-tutorial-rg-00000000> durch den Namen Ihrer Ressourcengruppe und <msdocssa00000000> durch den Namen Ihres Azure-Speicherkontos.

# Create new tags. This syntax works with or without quotes around each key-value pair.
az storage account update --name <msdocssa00000000> \
                          --resource-group <msdocs-tutorial-rg-00000000> \
                          --tags Team=t1 Environment=e1

# Create new tags containing spaces. You must use quotes.
az storage account update --name <msdocssa00000000> \
                          --resource-group <msdocs-tutorial-rg-00000000> \
                          --tags "Floor number=f1" "Cost center=cc1"

# Create a new tag with an empty value.
az storage account update --name <msdocssa00000000> \
                          --resource-group <msdocs-tutorial-rg-00000000> \
                          --tags "Department="''""

# Create a new tag containing special characters resulting in "Path": "$G:\\myPath".
az storage account update --name <msdocssa00000000> \
                          --resource-group <msdocs-tutorial-rg-00000000> \
                          --tags "Path=\$G:\myPath"

# Create a tag from a variable.
newTag="tag1=tag value with spaces"
az storage account update --name <msdocssa00000000> \
                          --resource-group <msdocs-tutorial-rg-00000000> \
                          --tags "$newTag"

Wenn Sie vorherige Tags nicht überschreiben möchten, während Sie diesen Tutorialschritt durcharbeiten, verwenden Sie den Befehl az tag update, um den Parameter --operation auf merge festzulegen.

# Get the resource ID of your storage account.
saID=$(az resource show --resource-group <msdocs-tutorial-rg-00000000> \
                        --name <msdocssa00000000> \
                        --resource-type Microsoft.Storage/storageAccounts \
                        --query "id" \
                        --output tsv)

echo My storage account ID is $saID

# Append new tags.
az tag update --resource-id $saID \
              --operation merge \
              --tags <tagName>=<tagValue>

# Get a list of all tags.
az tag list --resource-id $saID

Vergleich weiterer umgebungsspezifischer Skripts

Sehen Sie sich diese Skriptunterschiede genauer an. In diesen Beispielen werden die Unterschiede bei Anführungszeichen für Folgendes veranschaulicht:

  • Übergeben einer JSON-Zeichenfolge als Parameterwert
  • Filtern von Ergebnissen mit dem Parameter --query
    • Zahlen
    • Boolesche Werte
    • Datumsangaben

Beispiel eines Parameters mit einer JSON-Zeichenfolge. Dieses Skript dient als zukünftige Referenz, da wir in diesem Tutorial nicht mit az rest arbeiten.

az rest --method patch \
        --url https://management.azure.com/subscriptions/<mySubscriptionID>/resourceGroups/<myResourceGroup>/providers/Microsoft.HybridCompute/machines/<machineName>?api-version=yyyy-mm-dd-preview \
        --resource https://management.azure.com/ \
        --headers Content-Type=application/json \
        --body '{"properties": {"agentUpgrade": {"enableAutomaticUpgrade": false}}}'

Beispiel für das Filtern nach einem numerischen Wert. Sofern Sie nicht über eine VM in Ihrem aktuellen Abonnement verfügen, dient dieses Beispiel als zukünftige Referenz.

az vm list --resource-group <myResourceGroup> \
           --query "[?storageProfile.osDisk.diskSizeGb >=\`50\`].{Name:name, admin:osProfile.adminUsername, DiskSize:storageProfile.osDisk.diskSizeGb}" \
           --output table

Beispiel für das Filtern eines booleschen Werts mithilfe des in diesem Tutorial erstellten Speicherkontos.

az storage account list --resource-group <msdocs-tutorial-rg-00000000> \
    --query "[?allowBlobPublicAccess == \`true\`].id"

Beispiele für das Filtern nach einem Datum mithilfe des in diesem Tutorial erstellten Speicherkontos.

# include time
az storage account list --resource-group <msdocs-tutorial-rg-00000000> \
    --query "[?creationTime >='2021-11-15T19:14:27.103127+00:00'].{saName:name, saID: id, sku: sku.name}"

# exclude time
az storage account list --resource-group <msdocs-tutorial-rg-00000000> \
    --query "[?creationTime >='2021-11-15'].{saName:name, saID: id, sku: sku.name}"

# subtract days and use a variable
saDate=$(date +%F -d "-30days")
az storage account list --resource-group <msdocs-tutorial-rg-00000000> \
    --query "[?creationTime >='$saDate'].{saName:name, saID: id, sku: sku.name}"

Debuggen von Azure CLI-Referenzbefehlen

Verwenden des Parameters --debug

Die Azure CLI bietet einen --debug-Parameter, der mit jedem Befehl verwendet werden kann. Die Debugausgabe ist umfangreich, stellt aber weitere Informationen zu Ausführungsfehlern zur Verfügung. Verwenden Sie den Bash-Befehl clear, um die Konsolenausgabe zwischen Tests zu entfernen.

Mit diesen Beispielen werden die Argumente, die von der Azure CLI tatsächlich empfangen werden, in Python-Syntax angezeigt.

Dieses Beispiel ist sowohl in Bash als auch in PowerShell korrekt.

az '{"key":"value"}' --debug

Hier sehen Sie, was die Azure CLI in der Zeile Command arguments interpretiert:

Command arguments: ['{"key":"value"}', '--debug']

Dieses zweite Beispiel ist ebenfalls korrekt. Verwenden Sie den Bash-Befehl clear, um die Konsolenausgabe zwischen Tests zu entfernen.

clear
az "{\"key\":\"value\"}" --debug
Command arguments: ['{"key":"value"}', '--debug']

Diese nächsten beiden Beispiele sind falsch, da Anführungszeichen und Leerzeichen von Bash interpretiert werden.

Falsches Format Problem Konsolenausgabe
az {"key":"value"} --debug Fehlende einfache Anführungszeichen oder Escapezeichen Befehlsargumente: ['{key:value}', '--debug']
az {"key": "value"} --debug Fehlende einfache Anführungszeichen oder Escapezeichen und zusätzliches Leerzeichen Befehlsargumente: ['{key:', 'value}', '--debug']

Verwenden des Befehls echo

--debug gibt genau an, was die Azure CLI interpretiert. Eine zweite Option besteht jedoch darin, den Wert eines Ausdrucks an Ihre Konsole zurückzugeben. Diese Methode ist hilfreich, wenn sie die Ergebnisse des --query-Elements überprüfen, das unter Auffüllen der Variablen für die Verwendung in Skript ausführlich behandelt wird.

strExpression='{"key":"value"}'
echo $strExpression
{"key":"value"}

Problembehandlung

Im Anschluss sind häufige Fehler aufgeführt, die auftreten, wenn eine Azure CLI-Verweisbefehlssyntax nicht ordnungsgemäß geschrieben wird:

  • „Ungültige Anforderung ... {etwas} ist ungültig“: Dieser Fehler kann durch ein Leerzeichen, ein einfaches Anführungszeichen oder doppelte Anführungszeichen oder durch fehlende Anführungszeichen verursacht werden.

  • „Unerwartetes Token...“ wird angezeigt, wenn ein zusätzliches Leerzeichen oder Anführungszeichen vorhanden ist.

  • Der Fehler „Ungültiger Wert für jmespath_type“ wird häufig durch falsche Anführungszeichen im Parameter --query verursacht.

  • „Ungültiger Variablenverweis“ wird empfangen, wenn eine Zeichenfolge nicht ordnungsgemäß formatiert ist (häufig aufgrund einer Verkettung oder eines fehlenden Escapezeichens).

  • „Unbekannte Argumente“ wird häufig durch ein falsches Zeilenfortsetzungszeichen verursacht.

  • „Fehlender Ausdruck nach dem unären Operator“ wird angezeigt, wenn ein Zeilenfortsetzungszeichen fehlt.

Weitere Details

Möchten Sie weitere Details zu einem der in diesem Tutorialschritt behandelten Themen? Weitere Informationen finden Sie unter den Links in dieser Tabelle:

Betreff Weitere Informationen
Skriptunterschiede Anführungszeichen in Bash
Anführungszeichen in PowerShell
Probleme mit Anführungszeichen bei PowerShell
Tipps zur Windows-Befehlszeile
Parameter Verwenden von Anführungszeichen in Azure CLI-Parametern
Weitere Syntaxbeispiele für Bash, PowerShell und Cmd finden Sie unter Abfragen einer Azure CLI-Befehlsausgabe mithilfe einer JMESPath-Abfrage.

Nächster Schritt

Sie haben gelernt, wie Sie die Azure CLI-Syntax für Bash, PowerShell und Cmd schreiben. Fahren Sie nun mit dem nächsten Schritt fort, um zu erfahren, wie Sie Werte in eine Variable extrahieren.