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 differenze di scripting secondario. In questo passaggio dell'esercitazione viene illustrato come creare i primi valori dei parametri Archiviazione di Azure Account e formattare per tutti e tre i linguaggi di scripting.

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 il linguaggio di scripting scelto perché non sono intercambiabili.

linguaggio di scripting 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 i linguaggi di scripting. 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 virgolette tra i 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 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"}' 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 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 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 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. Questo esempio assegna un ID casuale al nome dell'account di archiviazione, ma se si vuole usare un nome diverso, vedere Panoramica dell'account di archiviazione per le regole del nome dell'account di archiviazione.

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

Nota

Si è appena ricevuto 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"
}

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 del linguaggio di scripting 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 del linguaggio di scripting

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 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 quando si lavora con i comandi dell'interfaccia della riga di comando di Azure si riscontrano difficoltà a comprendere e correggere un errore di esecuzione, --debug è la risposta per vedere i passaggi eseguiti dall'interfaccia della riga di comando di Azure.

Ecco una piccola 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 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.

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 Altre informazioni
Differenze di scripting Differenze tra le virgolette tra i linguaggi di scripting
Regole di virgolette Bash
Regole di virgolette di PowerShell
Considerazioni sull'esecuzione dell'interfaccia della riga di comando di Azure in un 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.