Informazioni sulle differenze di sintassi dell'interfaccia della riga di comando di Azure in Bash, PowerShell e Cmd
I comandi dell'interfaccia della riga di comando di Azure possono essere eseguiti in ambienti Bash, PowerShell e Windows Command Shell (Cmd). Esistono tuttavia differenze di scripting secondario. In questo passaggio dell'esercitazione viene illustrato come creare il primo account Archiviazione di Azure e formattare i valori dei parametri per tutti e tre gli ambienti.
Prerequisiti
- Sono stati completati i prerequisiti per preparare l'ambiente.
- È possibile accedere a un gruppo di risorse con
contributor
o autorizzazioni superiori a livello di gruppo di risorse.
Tenere presente i caratteri di continuazione di riga
La maggior parte della documentazione dell'interfaccia della riga di comando di Azure è scritta e testata in Bash usando Azure Cloud Shell. Una delle prime cose da ricordare quando si copia la sintassi dell'interfaccia della riga di comando di Azure consiste nel verificare i caratteri di continuazione della riga per l'ambiente scelto perché non sono intercambiabili.
Ambiente | Carattere di continuazione riga |
---|---|
Bash | Barra rovesciata (\ ) |
PowerShell | Backtick (` ) |
Cmd | Carota (^ ) |
Suggerimento
Il pulsante Copia nell'angolo superiore destro dei blocchi di codice dell'interfaccia della riga di comando di Azure rimuove la barra rovesciata (\
) e la barra rovesciata (`
) per progettazione. Se si desidera copiare un blocco di codice formattato, usare la tastiera o il mouse per selezionare e copiare l'esempio.
Comprendere le differenze di sintassi quando si usano le variabili
La sintassi per l'uso delle variabili varia leggermente tra gli ambienti. Ecco un confronto:
Caso d'uso | Bash | PowerShell | Cmd |
---|---|---|---|
Creare una variabile | variableName=varValue | $variableName="varValue" | set variableName=varValue |
Usare la variabile come valore del parametro | variableName | $variableName | %variableName% |
Usare la variabile nel --query parametro |
'$variableName' | '$variableName' | '$variableName' |
Esistono diversi modi per restituire informazioni sulle variabili alla schermata della console, ma echo
funziona nella maggior parte dei casi. Ecco un confronto:
- Bash: echo $varResourceGroup
- PowerShell: echo $varResourceGroup
- Cmd: echo %varResourceGroup%
Nel passaggio tre popolare le variabili da usare negli script vengono illustrati esempi approfonditi di sintassi delle variabili.
Informazioni sulle differenze tra le virgolette tra ambienti
Ogni parametro dell'interfaccia della riga di comando di Azure è una stringa. Tuttavia, ogni ambiente ha regole proprie per la gestione di virgolette singole e doppie, spazi e valori dei parametri.
Valore stringa | Interfaccia della riga di comando di Azure | PowerShell | Cmd |
---|---|---|---|
Testo | 'text' o "text" | 'text' o "text" | "text" |
Numero | \'50\' | ''50'' | '50' |
Booleano | \'true\' | ''false'' | 'true' |
Data | '2021-11-15' | '2021-11-15' | '2021-11-15' |
JSON | '{"key":"value"}' o "{"key":"value"}" | '{"key":"value"}' | "{"key":"value"}" |
Molti parametri dell'interfaccia della riga di comando di Azure accettano un elenco di valori separati da spazi. Questo influisce sulle virgolette.
- Elenco delimitato da spazi non racchiusi tra virgoole: --parameterName firstValue secondValue
- Elenco delimitato da spazi tra virgolette: --parameterName "firstValue" "secondValue"
- Valori che contengono uno spazio: --parameterName "value1a value1b" "value2a value2b" "value3"
Se non si è certi del modo in cui la stringa verrà valutata dall'ambiente, restituire il valore di una stringa nella console o usare --debug
come illustrato in Eseguire il debug dei comandi di riferimento dell'interfaccia della riga di comando di Azure.
Creare un account di archiviazione per applicare ciò che si è appreso
Il resto di questo passaggio dell'esercitazione illustra le regole di virgolette nei comandi dell'interfaccia della riga di comando di Azure e usa il gruppo di risorse creato in Preparare l'ambiente per l'interfaccia della riga di comando di Azure. Sostituire <msdocs-tutorial-rg-00000000>
con il nome del gruppo di risorse.
Creare un account di archiviazione di Azure da usare in questa esercitazione. In questo esempio viene assegnato un ID casuale al nome dell'account di archiviazione, ma se si vuole usare un nome diverso, vedere panoramica dell'account Archiviazione per le regole del nome dell'account di archiviazione.
Questo esempio di script seguente illustra la sintassi specifica dell'ambiente per quanto segue:
- Continuazione di riga
- Utilizzo variabile
- Identificatori casuali
echo
comando
# 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
L'interfaccia della riga di comando di Azure restituisce più di 100 righe di JSON come output quando viene creato un nuovo account di archiviazione. L'output del dizionario JSON seguente contiene campi omessi per brevità.
{
"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"
}
Creare tag per praticare le differenze tra virgolette
Usando az storage account update, aggiungere tag per identificare l'account di archiviazione e ottenere informazioni sulle differenze tra virgolette. Questi esempi di script illustrano la sintassi specifica dell'ambiente per quanto segue:
- Valori contenenti spazi
- Spazi vuoti tra virgolette
- Escape dei caratteri speciali
- Uso delle variabili
Il --tags
parametro accetta un elenco separato da spazi di coppie key:value. Sostituire <msdocs-tutorial-rg-00000000>
con il nome del gruppo di risorse e <msdocssa00000000>
con il nome dell'account di archiviazione di Azure.
# 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"
Se non si vogliono sovrascrivere i tag precedenti durante l'esecuzione di questo passaggio dell'esercitazione, usare il comando az tag update impostando il --operation
parametro su merge
.
# 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
Confrontare altri script specifici dell'ambiente
Esaminare in modo più approfondito queste differenze di script. Questi esempi illustrano le differenze tra virgolette per quanto segue:
- Passare una stringa JSON come valore di parametro
- Filtrare i risultati con il
--query
parametro- Numeri
- Valori booleani
- Date
Esempio di parametro contenente una stringa JSON. Questo script viene fornito per riferimento futuro perché non si sta lavorando az rest
in questa esercitazione.
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}}}'
Esempio di filtro per un valore numerico. A meno che non si disponga di una macchina virtuale nella sottoscrizione corrente, questo esempio viene fornito per riferimento futuro.
az vm list --resource-group <myResourceGroup> \
--query "[?storageProfile.osDisk.diskSizeGb >=\`50\`].{Name:name, admin:osProfile.adminUsername, DiskSize:storageProfile.osDisk.diskSizeGb}" \
--output table
Esempio di filtro di un valore booleano usando l'account di archiviazione creato in questa esercitazione.
az storage account list --resource-group <msdocs-tutorial-rg-00000000> \
--query "[?allowBlobPublicAccess == \`true\`].id"
Esempi di filtro di una data usando l'account di archiviazione creato in questa esercitazione.
# 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}"
Eseguire il debug dei comandi di riferimento dell'interfaccia della riga di comando di Azure
Usare il --debug
parametro
L'interfaccia della riga di comando di Azure offre un --debug
parametro che può essere usato con qualsiasi comando. L'output di debug è esteso, ma offre altre informazioni sugli errori di esecuzione. Usare il comando Bash clear
per rimuovere l'output della console tra i test.
Questi esempi rivelano gli argomenti effettivi ricevuti dall'interfaccia della riga di comando di Azure nella sintassi python.
Questo esempio è corretto sia in Bash che in PowerShell.
az '{"key":"value"}' --debug
Vedere l'interpretazione dell'interfaccia della riga di comando di Azure nella Command arguments
riga di output.
Command arguments: ['{"key":"value"}', '--debug']
Anche questo secondo esempio è corretto. Usare il comando Bash clear
per rimuovere l'output della console tra i test.
clear
az "{\"key\":\"value\"}" --debug
Command arguments: ['{"key":"value"}', '--debug']
Questi due esempi successivi non sono corretti come virgolette e spazi vengono interpretati da Bash.
Formato non corretto | Problema | Output console |
---|---|---|
az {"key":"value"} --debug | Virgolette singole o caratteri di escape mancanti | Argomenti del comando: ['{key:value}', '--debug'] |
az {"key": "value"} --debug | Virgolette singole o caratteri di escape mancanti e contiene spazio aggiuntivo | Argomenti del comando: ['{key:', 'value}', '--debug'] |
Usare il echo
comando
Anche se --debug
indica esattamente l'interpretazione dell'interfaccia della riga di comando di Azure, una seconda opzione consiste nel restituire il valore di un'espressione alla console. Questo metodo è utile quando si verificano i risultati di --query
che sono descritti in dettaglio in Popolare le variabili da usare negli script.
strExpression='{"key":"value"}'
echo $strExpression
{"key":"value"}
Risoluzione dei problemi
Di seguito sono riportati errori comuni quando una sintassi del comando di riferimento dell'interfaccia della riga di comando di Azure non è scritta correttamente:
"Richiesta non valida ... {something} non è valido" potrebbe essere causato da uno spazio, da virgolette singole o doppie o dalla mancanza di virgolette.
"Token imprevisto..." viene visualizzato quando c'è un ulteriore spazio o virgolette.
L'errore "Valore jmespath_type non valido" deriva spesso da virgolette non corrette nel
--query
parametro ."Il riferimento alla variabile non è valido" viene ricevuto quando una stringa non viene formattata correttamente spesso a causa della concatenazione o di un carattere di escape mancante.
"Argomenti non riconosciuti" è spesso causato da un carattere di continuazione di riga non corretto.
"Espressione mancante dopo l'operatore unario" viene visualizzata quando manca un carattere di continuazione di riga.
Ottenere altri dettagli
Vuoi maggiori dettagli su uno degli argomenti trattati in questo passaggio dell'esercitazione? Per altre informazioni, usare i collegamenti in questa tabella.
Oggetto | Altre informazioni |
---|---|
Differenze di scripting | Virgolette Bash |
Virgolette di PowerShell | |
Problemi di virgolette con PowerShell | |
Suggerimenti della riga di comando di Windows | |
Parametri | Usare le virgolette nei parametri dell'interfaccia della riga di comando di Azure |
Altri esempi di sintassi di Bash, PowerShell e Cmd nell'output dei comandi di query con JMESPath |
Passaggio successivo
Dopo aver appreso come scrivere la sintassi dell'interfaccia della riga di comando di Azure per Bash, PowerShell e Cmd, procedere con il passaggio successivo per informazioni su come estrarre i valori in una variabile.