Freigeben über


Lernen Sie die Unterschiede in der Azure CLI-Syntax zwischen Bash, PowerShell und Cmd kennen

Azure CLI-Befehle können in den Skriptsprachen Bash, PowerShell als auch der Windows-Befehlsshell (Cmd) ausgeführt werden. Es gibt jedoch subtile Unterschiede bei den Skripten. 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 contributor-Berechtigungen oder höheren auf der Ebene der Ressourcengruppe.

Achten Sie auf 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 Karotte (^)

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 Schlagen PowerShell Cmd
Variable erstellen variableName=varValue $variableName="varValue" setze 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.

Erfahren Sie mehr über die Unterschiede im Zitieren 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.

String-Wert Azure-Befehlszeilenschnittstelle (Azure CLI) PowerShell Cmd
Text „Text“ oder ‚Text‘ „Text“ oder ‚Text‘ "Text"
Nummer '50' ''50'' "50"
Boolescher Typ (Boolean) `wahr` falsch wahr
Datum '2021-11-15' '2021-11-15' '2021-11-15'
JSON '{"key":"value"}' oder "{"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 das Zitieren aus.

  • Unquotierte durch Leerzeichen getrennte Liste: --parameterName firstValue secondValue
  • Liste in Anführungszeichen, getrennt durch Leerzeichen: --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.

Von Bedeutung

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 gerade den Fehler "Abonnement nicht gefunden" erhalten? Dieser Fehler tritt auf, wenn Microsoft.Storage 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"
}

Tags erstellen, um die Unterschiede bei Anführungszeichen zu üben.

Fügen Sie mithilfe von az storage account update Tags hinzu, um Ihr Speicherkonto zu identifizieren und mehr über die Unterschiede bei der Verwendung von Anführungszeichen zu erfahren. In diesen Skriptbeispielen wird die sprachspezifische Skriptsyntax für Folgendes veranschaulicht:

  • Werte, die Leerzeichen enthalten
  • Leerzeichen zitieren
  • Sonderzeichen escapen
  • 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 skriptsprachenbezogener Skripte

Sehen Sie sich diese Skriptunterschiede genauer an. In diesen Beispielen werden die Unterschiede bei der Verwendung von 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 folgende Informationen:

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

Wenn beim Arbeiten mit Azure CLI-Befehlen Schwierigkeiten beim Verstehen und Beheben eines Ausführungsfehlers auftreten, ist --debug die Lösung, um die Schritte zu sehen, die 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...“ erscheint, wenn ein zusätzliches Leer- oder Anführungszeichen vorhanden ist.

  • Der Fehler „Ungültiger Wert für jmespath_type“ tritt oft aufgrund falscher Anführungszeichen im Parameter --query auf.

  • „Ungültiger Variablenverweis“ wird angezeigt, wenn ein String falsch formatiert ist, oft aufgrund einer Verkettung oder eines fehlenden Escapezeichens.

  • „Unbekannte Argumente“ werden fälschlicherweise 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 Erfahren Sie mehr
Skriptunterschiede Unterschiede zwischen Skriptsprachen aufzeigen
Bash-Quotierungsregeln
PowerShell-Quotingregeln
Überlegungen zum Ausführen der Azure CLI in einer PowerShell-Skriptsprache
Tipps zur Windows-Befehlszeile
Die Parameter Verwenden von Anführungszeichen in Azure CLI-Parametern
Weitere Syntaxbeispiele für Bash, PowerShell und Cmd finden Sie unter Abfragen von Befehlsausgaben mit JMESPath.
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.