Condividi tramite


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 linguaggi di scripting Bash, PowerShell e Windows Command Shell (cmd). Esistono tuttavia sottili differenze di script. In questo passaggio dell'esercitazione, imparerai come creare il tuo primo account di archiviazione di Azure e formattare i valori dei parametri per tutti e tre i linguaggi di scripting.

Prerequisiti

  • Hai completato 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 il linguaggio di scripting scelto, in quanto non sono intercambiabili.

Linguaggio di scripting Carattere di continuazione riga
Bash Barra rovesciata (\)
PowerShell Backtick (`)
Cmd Cursore (^)

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 l'apice inverso (`) per progettazione. Per 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 i linguaggi di scripting. Ecco un confronto:

Caso d'uso Bash PowerShell Cmd
Creare una variabile variableName=varValue $variableName="varValue" imposta variableName=varValue
Usare la variabile come valore del parametro NomeVariabile $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 3 popolare le variabili da usare negli script vengono illustrati esempi approfonditi di sintassi delle variabili.

Scopri le differenze nell'uso delle virgolette nei linguaggi di scripting

Ogni parametro dell'interfaccia della riga di comando di Azure è una stringa. Tuttavia, ogni linguaggio di scripting ha regole proprie per la gestione di virgolette singole e doppie, spazi e valori dei parametri.

Valore di tipo stringa Interfaccia CLI di Azure PowerShell Cmd
Testo 'text' o "text" 'text' o "text" "testo"
Numero `50` ''50'' '50'
Booleano \'true\' ''false'' vero
Dati 15/11/2021 15/11/2021 15/11/2021
JSON (JavaScript Object Notation) '{"key":"value"}' o "{"key":"value"}" '{"key": "value"}' o "{'"key'": '"value'"}" o "{""key"": ""value""}" {"key":"value"}

Molti parametri dell'interfaccia della riga di comando di Azure accettano un elenco di valori separati da spazi. Questo formato influisce sulle citazioni.

  • Elenco delimitato da spazi non racchiusi tra virgoole: --parameterName firstValue secondValue
  • Elenco di elementi separati 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 viene valutata dal linguaggio di scripting, 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 le informazioni apprese

Il resto di questo passaggio dell'esercitazione illustra le regole di virgolette nei comandi di Azure CLI, usando il gruppo di risorse creato in Preparare l'ambiente per Azure CLI. 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. Tuttavia, se si vuole usare un nome diverso, consultare la panoramica sull'account di archiviazione per le regole sui nomi degli account di archiviazione.

Importante

Prima di poter creare un account di archiviazione, il Microsoft.Storage provider di risorse deve essere registrato nella sottoscrizione. Per informazioni sulla registrazione dei tipi di risorse, vedere Registrare il provider di risorse.

Questo esempio di script seguente illustra la sintassi specifica del linguaggio di scripting 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

Annotazioni

È stato visualizzato un errore "Sottoscrizione non trovata"? Questo errore si verifica quando Microsoft.Storage non è registrato nella sottoscrizione attiva. Per registrare un provider di risorse, vedere Provider e tipi di risorse di Azure.

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

Crea tag per esercitarti a citare le differenze

Usando az storage account update, aggiungi tag per identificare il tuo account di archiviazione e ottenere informazioni sulle differenze di quotazione. Questi esempi di script illustrano la sintassi specifica del linguaggio di scripting per quanto segue:

  • Valori contenenti spazi
  • Citare spazi vuoti
  • Escape dei caratteri speciali
  • Uso delle variabili

Il parametro --tags accetta un elenco di coppie chiave:valore separate da spazio. 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 del linguaggio di scripting

Esaminare in modo più approfondito queste differenze di script. Questi esempi illustrano le differenze nelle virgolette per i seguenti elementi:

  • 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 usa 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 a riga di comando di Azure

Usare il parametro di debug

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 informazioni che includono quanto segue:

  • Argomenti di comando (valori dei parametri) interpretati dal linguaggio di scripting
  • Percorso del file di log
  • Dettagli chiamata API
  • Errori di esecuzione

Se si riscontrano difficoltà a comprendere e correggere un errore di esecuzione durante l'uso dei comandi dell'interfaccia della riga di comando di Azure, --debug è la risposta per vedere la procedura eseguita dall'interfaccia della riga di comando di Azure.

Ecco una parte dell'output di debug durante la creazione di un account di archiviazione:

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

Per altri suggerimenti sulla risoluzione dei problemi, vedere Risoluzione dei problemi dell'interfaccia della riga di comando di Azure.

Usare il comando echo

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 dell'oggetto --query, descritto 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 causata da uno spazio, da virgolette singole o doppie o dalla mancanza di virgolette.
  • "Token imprevisto..." viene visualizzato quando c'è uno spazio o virgolette in più.
  • L'errore "Valore jmespath_type non valido" deriva spesso da una virgolettatura errata nel parametro --query.
  • "Il riferimento alla variabile non è valido" viene ricevuto quando una stringa non è formattata correttamente, spesso a causa della concatenazione o di un carattere di escape mancante.
  • Gli "argomenti non riconosciuti" sono spesso causati da un carattere di continuazione di riga non corretto.
  • "L'espressione 'Espressione mancante dopo l'operatore unario' viene visualizzata quando manca un carattere di continuazione di riga."

Per altri suggerimenti per la risoluzione dei problemi, vedere Risoluzione dei problemi relativi ai comandi dell'interfaccia della riga di comando di Azure.

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 Ulteriori informazioni
Differenze di scripting Differenze nella gestione delle virgolette tra i linguaggi di scripting
Regole di quote Bash
Regole di virgolette di PowerShell
Considerazioni per l'esecuzione di Azure CLI nel linguaggio di scripting di 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
Risoluzione dei problemi Risoluzione dei problemi relativi ai comandi dell'interfaccia della riga di comando di Azure

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.