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.