Azure CLI-Syntaxunterschiede zwischen Bash, PowerShell und Cmd

Azure CLI-Befehle können sowohl in Den Skriptsprachen Bash, PowerShell und Windows-Befehlsshell (Cmd) ausgeführt werden. Es gibt jedoch geringfügige Unterschiede bei der Skripterstellung. In diesem Lernprogrammschritt erfahren Sie, wie Sie Ihr erstes Azure Storage-Konto erstellen und Parameterwerte für alle drei Skriptsprachen 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. Eines der ersten Punkte, die Sie beim Kopieren der Azure CLI-Syntax beachten sollten, besteht darin, die Zeilenfortsetzungszeichen für die ausgewählte Skriptsprache zu überprüfen, da sie nicht austauschbar sind.

Skriptsprache 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 Skriptsprachen. 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 zum Zitieren von Unterschieden zwischen Skriptsprachen

Jeder Azure CLI-Parameter ist eine Zeichenfolge. Jede Skriptsprache verfügt jedoch über eigene Regeln für die Behandlung einzelner und doppelter Anführungszeichen, Leerzeichen und Parameterwerte.

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"}' oder "{'"key'"": '"value'"}" oder "{"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 Skriptsprache ausgewertet wird, geben Sie den Wert einer Zeichenfolge an Ihre Konsole zurück oder verwenden --debug Sie sie, wie in Debug 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.

Wichtig

Bevor Sie ein Speicherkonto erstellen können, muss der Microsoft.Storage Ressourcenanbieter in Ihrem Abonnement registriert sein. Informationen zum Registrieren von Ressourcentypen finden Sie unter Registrieren des Ressourcenanbieters.

In diesem nächsten Skriptbeispiel wird die sprachspezifische Skriptsyntax 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

Hinweis

Haben Sie nur einen Fehler "Abonnement nicht gefunden" erhalten? Dieser Fehler tritt auf, wenn Microsoft.Storage sie nicht im aktiven Abonnement registriert ist. Informationen zum Registrieren eines Ressourcenanbieters finden Sie unter Azure-Ressourcenanbieter und -Typen.

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. In diesen Skriptbeispielen wird die sprachspezifische Skriptsyntax für Folgendes veranschaulicht:

  • 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 skriptspezifischer 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, bietet Ihnen jedoch Informationen, einschließlich der folgenden:

  • Befehlsargumente (Parameterwerte) werden von der Skriptsprache interpretiert
  • Speicherort der Protokolldatei
  • API-Aufrufdetails
  • Ausführungsfehler

Wenn beim Arbeiten mit Azure CLI-Befehlen Schwierigkeiten beim Verstehen und Beheben eines Ausführungsfehlers auftreten, ist Ihre Antwort, um die Schritte anzuzeigen, --debug die Azure CLI ausführt.

Hier ist ein kleiner Teil der Debugausgabe beim Erstellen eines Speicherkontos:

 cli.knack.cli: Command arguments: ['storage', 'account', 'create', '--name', 'msdocssa00000000', '--resource-group', 'msdocs-rg-test', '--location', 'eastus', '--sku', 'Standard_RAGRS', '--kind', 'StorageV2', '--output', 'json', '--debug']
 ...
 cli.azure.cli.core.sdk.policies: Request URL: 'https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/checkNameAvailability?api-version=2023-01-01'
cli.azure.cli.core.sdk.policies: Request method: 'POST'
cli.azure.cli.core.sdk.policies: Request headers:
cli.azure.cli.core.sdk.policies:     'Content-Type': 'application/json'
cli.azure.cli.core.sdk.policies:     'Content-Length': '73'
cli.azure.cli.core.sdk.policies:     'Accept': 'application/json'
cli.azure.cli.core.sdk.policies:     'x-ms-client-request-id': '00000000-0000-0000-0000-000000000000'
cli.azure.cli.core.sdk.policies:     'CommandName': 'storage account create'
cli.azure.cli.core.sdk.policies:     'ParameterSetName': '--name --resource-group --location --sku --kind --output --debug'
cli.azure.cli.core.sdk.policies:     'User-Agent': 'AZURECLI/2.61.0 (DEB) azsdk-python-core/1.28.0 Python/3.11.8 (Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.35)'
cli.azure.cli.core.sdk.policies:     'Authorization': '*****'
cli.azure.cli.core.sdk.policies: Request body:
cli.azure.cli.core.sdk.policies: {"name": "msdocssa00000000", "type": "Microsoft.Storage/storageAccounts"}
urllib3.connectionpool: Starting new HTTPS connection (1): management.azure.com:443
urllib3.connectionpool: https://management.azure.com:443 "POST /subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/checkNameAvailability?api-version=2023-01-01 HTTP/1.1" 200 22
cli.azure.cli.core.sdk.policies: Response status: 200
...

Weitere Tipps zur Problembehandlung finden Sie unter "Problembehandlung bei Azure CLI".

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 Tipps zur Problembehandlung finden Sie unter "Problembehandlung bei Azure CLI-Befehlen".

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 Quotieren von Unterschieden zwischen Skriptsprachen
Bash quoting rules
PowerShell-Quotingregeln
Überlegungen zum Ausführen der Azure CLI in einer PowerShell-Skriptsprache
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.
Problembehandlung Problembehandlung bei Azure CLI-Befehlen

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.