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