Share via


Verschillen in Azure CLI-syntaxis in Bash, PowerShell en Cmd

Azure CLI-opdrachten kunnen worden uitgevoerd in zowel Bash-, PowerShell- als Windows-opdrachtshell-omgevingen (Cmd). Er zijn echter subtile scriptingverschillen. In deze zelfstudie leert u hoe u uw eerste Azure Storage-account maakt en parameterwaarden opstelt voor alle drie de omgevingen.

Vereisten

  • U hebt de vereisten voltooid om uw omgeving voor te bereiden.
  • U hebt toegang tot een resourcegroep met contributor of hogere machtigingen op resourcegroepniveau.

Houd rekening met regelvervolgtekens

De meeste Azure CLI-documentatie is geschreven en getest in Bash met behulp van Azure Cloud Shell. Een van de eerste dingen die u moet onthouden bij het kopiëren van de Azure CLI-syntaxis, is het controleren van de regelvervolgtekens voor uw gekozen omgeving, omdat deze niet uitwisselbaar zijn.

Omgeving Regelvervolgteken
Bash Backslash (\)
Powershell Backtick (`)
Cmd Wortel (^)

Tip

Met de knop Kopiëren in de rechterbovenhoek van Azure CLI-codeblokken wordt de backslash (\) en de backtick (`) standaard verwijderd. Als u een opgemaakt codeblok wilt kopiëren, gebruikt u het toetsenbord of de muis om het voorbeeld te selecteren en te kopiëren.

Inzicht in syntaxisverschillen bij het gebruik van variabelen

De syntaxis voor het gebruik van variabelen varieert enigszins tussen omgevingen. Hier volgt een vergelijking:

Gebruiksscenario Bash PowerShell Cmd
Variabele maken variableName=varValue $variableName="varValue" set variableName=varValue
Variabele gebruiken als parameterwaarde variableName $variableName %variableName%
Variabele gebruiken in --query parameter '$variableName' '$variableName' '$variableName'

Er zijn verschillende manieren om variabele informatie te retourneren naar uw consolescherm, maar echo werkt in de meeste gevallen. Hier volgt een vergelijking:

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

In stap drie vult u variabelen in voor gebruik in scripts, doorloopt u uitgebreide voorbeelden van variabelesyntaxis.

Meer informatie over het citeren van verschillen tussen omgevingen

Elke Azure CLI-parameter is een tekenreeks. Elke omgeving heeft echter zijn eigen regels voor het verwerken van enkele en dubbele aanhalingstekens, spaties en parameterwaarden.

Tekenreekswaarde Azure CLI PowerShell Cmd
Sms verzenden 'tekst' of 'tekst' 'tekst' of 'tekst' "tekst"
Aantal \'50\' ''50'' '50'
Booleaanse waarde \'true\' ''false'' 'waar'
Datum '2021-11-15' '2021-11-15' '2021-11-15'
JSON {"key":"value"}' of "{"key":"value"}" {"key":"value"}' "{"key":"value"}"

Veel Azure CLI-parameters accepteren een door spaties gescheiden lijst met waarden. Dit heeft gevolgen voor het aanhalingsteken.

  • Niet-door spaties gescheiden lijst: --parameterName firstValue secondValue
  • Lijst met tussen spaties gescheiden: --parameterName "firstValue" "secondValue"
  • Waarden die een spatie bevatten: --parameterName "value1a value1b" "value2a value2b" "value3"

Als u niet zeker weet hoe uw tekenreeks wordt geëvalueerd door uw omgeving, retourneert u de waarde van een tekenreeks naar uw console of gebruikt --debug u zoals wordt uitgelegd in Naslagopdrachten voor Azure CLI.

Een opslagaccount maken om toe te passen wat u hebt geleerd

In de rest van deze zelfstudiestap ziet u regels in Azure CLI-opdrachten en wordt de resourcegroep gebruikt die is gemaakt in Uw omgeving voorbereiden voor de Azure CLI. Vervang deze <msdocs-tutorial-rg-00000000> door de naam van uw resourcegroep.

Maak een Azure-opslagaccount dat u in deze zelfstudie wilt gebruiken. In dit voorbeeld wordt een willekeurige id toegewezen aan de naam van het opslagaccount, maar als u een andere naam wilt gebruiken, raadpleegt u het overzicht van het opslagaccount voor regels voor de naam van het opslagaccount.

In dit volgende voorbeeldscript ziet u de omgevingsspecifieke syntaxis voor het volgende:

  • Regelvervolging
  • Variabel gebruik
  • Willekeurige id's
  • echo opdracht
# 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

De Azure CLI retourneert meer dan 100 regels JSON als uitvoer wanneer een nieuw opslagaccount wordt gemaakt. De volgende JSON-woordenlijstuitvoer bevat velden die zijn weggelaten om kort te zijn.

{
"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 maken om te oefenen met het aanhalen van verschillen

Met az storage account update voegt u tags toe om uw opslagaccount te identificeren en meer te weten te komen over de verschillen. Deze scriptvoorbeelden demonstreren omgevingsspecifieke syntaxis voor het volgende:

  • Waarden die spaties bevatten
  • Lege spaties aanhalingstekens
  • Speciale tekens ontsnappen
  • Variabelen gebruiken

De --tags parameter accepteert een door spaties gescheiden lijst met sleutel:waardeparen. Vervang <msdocs-tutorial-rg-00000000> deze door de naam van uw resourcegroep en <msdocssa00000000> door de naam van uw Azure-opslagaccount.

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

Als u eerdere tags niet wilt overschrijven terwijl u deze zelfstudiestap uitvoert, gebruikt u de opdracht az tag update om de --operation parameter in te mergestellen op .

# 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

Meer omgevingsspecifieke scripts vergelijken

Bekijk deze scriptverschillen eens nader. In deze voorbeelden worden de verschillen voor het volgende gedemonstreert:

  • Een JSON-tekenreeks doorgeven als parameterwaarde
  • Resultaten filteren met de --query parameter
    • Nummers
    • Booleaanse waarden
    • Datums

Voorbeeld van een parameter met een JSON-tekenreeks. Dit script wordt gegeven voor toekomstig gebruik, omdat we in deze zelfstudie niet werken az rest .

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}}}'

Voorbeeld van filteren voor een numerieke waarde. Tenzij u een VIRTUELE machine in uw huidige abonnement hebt, wordt dit voorbeeld gegeven voor toekomstig gebruik.

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

Voorbeeld van het filteren van een Booleaanse waarde met behulp van het opslagaccount dat in deze zelfstudie is gemaakt.

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

Voorbeelden van het filteren van een datum met behulp van het opslagaccount dat in deze zelfstudie is gemaakt.

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

Fouten opsporen in Azure CLI-referentieopdrachten

Parameter gebruiken --debug

De Azure CLI biedt een --debug parameter die kan worden gebruikt met elke opdracht. Foutopsporingsuitvoer is uitgebreid, maar biedt meer informatie over uitvoeringsfouten. Gebruik de Bash-opdracht clear om console-uitvoer tussen tests te verwijderen.

In deze voorbeelden worden de werkelijke argumenten weergegeven die door de Azure CLI zijn ontvangen in de Python-syntaxis.

Dit voorbeeld is juist in zowel Bash als PowerShell.

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

Bekijk wat de Azure CLI interpreteert in de Command arguments regel van de uitvoer.

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

Dit tweede voorbeeld is ook juist. Gebruik de Bash-opdracht clear om console-uitvoer tussen tests te verwijderen.

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

Deze volgende twee voorbeelden zijn onjuist omdat aanhalingstekens en spaties worden geïnterpreteerd door Bash.

Onjuiste indeling Probleem Console-uitvoer
az {"key":"value"} --debug Ontbrekende enkele aanhalingstekens of escapetekens Opdrachtargumenten: ['{key:value}', '--debug']
az {"key": "value"} --debug Ontbrekende enkele aanhalingstekens of escapetekens en bevat extra spatie Opdrachtargumenten: ['{key:', 'value}', '--debug']

Opdracht gebruiken echo

Hoewel --debug u precies weet wat de Azure CLI interpreteert, is een tweede optie het retourneren van de waarde van een expressie aan uw console. Deze methode is handig bij het controleren van de resultaten ervan --query die in detail worden behandeld in Vulvariabelen voor gebruik in scripts.

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

Probleemoplossing

Hier volgen veelvoorkomende fouten wanneer de syntaxis van een Azure CLI-verwijzingsopdracht niet goed is geschreven:

  • "Ongeldige aanvraag ... {something} is ongeldig" kan worden veroorzaakt door een spatie, een enkel of dubbel aanhalingsteken of een gebrek aan een aanhalingsteken.

  • "Onverwacht token..." wordt gezien wanneer er een extra spatie of offerte is.

  • De fout 'Ongeldige jmespath_type waarde' komt vaak van een onjuiste vermelding in de --query parameter.

  • 'Variabele verwijzing is ongeldig' wordt ontvangen wanneer een tekenreeks niet goed is opgemaakt vanwege samenvoeging of een ontbrekend escape-teken.

  • 'Niet-herkende argumenten' wordt vaak veroorzaakt door een onjuist regelvervolgteken.

  • 'Ontbrekende expressie na unaire operator' wordt weergegeven wanneer een regelvervolgteken ontbreekt.

Meer informatie

Wilt u meer informatie over een van de onderwerpen die in deze zelfstudiestap worden behandeld? Gebruik de koppelingen in deze tabel voor meer informatie.

Onderwerp Meer informatie
Verschillen tussen scripts Bash-quoting
PowerShell-quoting
Problemen met PowerShell aanhalingstekens
Windows-opdrachtregeltips
Parameters Aanhalingstekens gebruiken in Azure CLI-parameters
Meer syntaxisvoorbeelden van Bash, PowerShell en Cmd in queryopdrachtuitvoer met behulp van JMESPath

Volgende stap

Nu u hebt geleerd hoe u de Azure CLI-syntaxis voor Bash, PowerShell en Cmd schrijft, gaat u verder met de volgende stap om te leren hoe u waarden kunt extraheren naar een variabele.