Delen via


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

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

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 de door u gekozen scripttaal, omdat deze niet uitwisselbaar zijn.

Scripttaal 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 scripttalen. 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 scripttalen

Elke Azure CLI-parameter is een tekenreeks. Elke scripttaal 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"} of "{"key"": "value"}" of "{"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 scripttaal, retourneert u de waarde van een tekenreeks naar uw console of gebruikt --debug u deze 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.

Belangrijk

Voordat u een opslagaccount kunt maken, moet de Microsoft.Storage resourceprovider zijn geregistreerd in uw abonnement. Zie Resourceprovider registreren voor meer informatie over het registreren van resourcetypen.

In dit volgende scriptvoorbeeld ziet u de taalspecifieke syntaxis voor scripts 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

Notitie

Hebt u zojuist de foutmelding 'Abonnement niet gevonden' ontvangen? Deze fout treedt op wanneer Microsoft.Storage deze niet is geregistreerd in het actieve abonnement. Zie Azure-resourceproviders en -typen om een resourceprovider te registreren.

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. In deze scriptvoorbeelden ziet u de taalspecifieke syntaxis voor scripts 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 scripttaalspecifieke 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. De foutopsporingsuitvoer is uitgebreid, maar biedt u informatie, waaronder de volgende:

  • Opdrachtargumenten (parameterwaarden) zoals geïnterpreteerd door de scripttaal
  • Locatie van uw logboekbestand
  • Details van API-aanroep
  • Uitvoeringsfouten

Als u bij het werken met Azure CLI-opdrachten problemen ondervindt bij het begrijpen en corrigeren van een uitvoeringsfout, --debug is het antwoord om te zien welke stappen Azure CLI uitvoert.

Hier volgt een klein deel van de uitvoer voor foutopsporing bij het maken van een opslagaccount:

 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
...

Zie Problemen met Azure CLI oplossen voor meer tips voor probleemoplossing.

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.

Zie Problemen met Azure CLI-opdrachten oplossen voor aanvullende tips voor probleemoplossing.

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 Verschillen tussen scripttalen citeren
Bash-quotingsregels
PowerShell-quotingsregels
Overwegingen voor het uitvoeren van de Azure CLI in een PowerShell-scripttaal
Windows-opdrachtregeltips
Parameters Aanhalingstekens gebruiken in Azure CLI-parameters
Meer syntaxisvoorbeelden van Bash, PowerShell en Cmd in queryopdrachtuitvoer met behulp van JMESPath
Probleemoplossing Problemen met Azure CLI-opdrachten oplossen

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.