Découvrir les différences de la syntaxe Azure CLI dans Bash, PowerShell et Cmd

Les commandes Azure CLI peuvent être exécutées dans les environnements Bash et PowerShell, et l’interpréteur de commandes Windows (Cmd). Toutefois, il existe des différences subtiles de script. Dans cette étape de tutoriel, découvrez comment créer votre premier compte de stockage Azure et mettre en forme des valeurs de paramètre pour les trois environnements.

Prérequis

  • Vous avez rempli les prérequis pour préparer votre environnement.
  • Vous avez accès à un groupe de ressources avec des autorisations contributor ou supérieures au niveau d’un groupe de ressources.

Faire attention aux caractères de continuation de ligne

La plupart de la documentation Azure CLI est écrite et testée dans Bash avec Azure Cloud Shell. Une des premières choses à retenir quand vous copiez la syntaxe Azure CLI est que vous devez vérifier les caractères de continuation de ligne de l’environnement choisi, car ils ne sont pas interchangeables.

Environnement Caractère de continuation de ligne
Bash Barre oblique inverse (\)
PowerShell Guillemet inverse (`)
Cmd Caret (^)

Conseil

Le bouton Copier en haut à droite des blocs de code Azure CLI supprime la barre oblique inverse (\) et le guillemet inverse (`) par conception. Si vous voulez copier un bloc de code mis en forme, utilisez votre clavier ou votre souris pour sélectionner et copier l’exemple.

Comprendre les différences de syntaxe en cas d’utilisation de variables

La syntaxe d’utilisation des variables varie légèrement entre les environnements. Voici une comparaison :

Cas d’usage Bash PowerShell Cmd
Créer une variable variableName=varValue $variableName="varValue" set variableName=varValue
Utiliser une variable comme valeur de paramètre variableName $variableName %variableName%
Utiliser une variable dans un paramètre --query '$variableName' '$variableName' '$variableName'

Il existe plusieurs façons de renvoyer des informations de variable sur l’écran de votre console, mais echo fonctionne dans la plupart des cas. Voici une comparaison :

  • Bash : echo $varResourceGroup
  • PowerShell : echo $varResourceGroup
  • Cmd : echo %varResourceGroup%

À l’étape 3, Remplir des variables à utiliser dans des scripts, vous utilisez des exemples détaillés de syntaxe de variable.

En savoir plus sur les différences d’utilisation des guillemets entre les environnements

Chaque paramètre Azure CLI est une chaîne. Toutefois, chaque environnement a ses propres règles pour gérer les guillemets simples et doubles, les espaces et les valeurs de paramètre.

Valeur de chaîne Azure CLI PowerShell Cmd
Texte 'text' ou « text » 'text' ou « text » "text"
Number \`50\` ``50`` `50`
Boolean \`true\` ``false`` 'true'
Date '2021-11-15' '2021-11-15' '2021-11-15'
JSON '{"key":"value"}' ou "{"key":"value"}" '{"key":"value"}' "{"key":"value"}"

De nombreux paramètres Azure CLI acceptent une liste de valeurs séparées par un espace. Cela impacte les guillemets.

  • Liste sans guillemets séparée par des espaces : --parameterName firstValue secondValue
  • Liste avec guillemets séparée par des espaces : --parameterName "firstValue" "secondValue"
  • Valeurs qui contiennent un espace : --parameterName "value1a value1b" "value2a value2b" "value3"

Si vous ne savez pas comment votre chaîne est évaluée par votre environnement, renvoyez la valeur d’une chaîne à votre console ou utilisez --debug comme expliqué dans Commandes de référence Azure CLI de débogage.

Créer un compte de stockage pour appliquer ce que vous avez appris

Le reste de cette étape de tutoriel explique les règles d’utilisation des guillemets dans les commandes Azure CLI, et utilise le groupe de ressources créé dans Préparer votre environnement pour Azure CLI. Remplacez <msdocs-tutorial-rg-00000000> par le nom de votre groupe de ressources.

Créez un compte de stockage Azure pour l’utiliser dans ce tutoriel. Cet exemple attribue un ID aléatoire au nom du compte de stockage, mais si vous voulez utiliser un autre nom, consultez Vue d’ensemble du compte de stockage pour connaître les règles de nom de compte de stockage.

L’exemple de script suivant décrit la syntaxe propre à l’environnement pour :

  • Continuation de ligne
  • Utilisation des variables
  • Identificateurs aléatoires
  • Commande echo
# 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

Azure CLI renvoie plus de 100 lignes de code JSON en sortie quand un compte de stockage est créé. La sortie de dictionnaire JSON suivante contient des champs omis afin de la raccourcir.

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

Créer des balises pour s’entraîner à utiliser les différents guillemets

En utilisant az storage account update, ajoutez des balises pour vous aider à identifier votre compte de stockage et à en savoir plus sur les différences de guillemets. Ces exemples de script décrivent la syntaxe propre à l’environnement pour :

  • Valeurs contenant des espaces
  • Guillemets pour les espaces vides
  • Échappement des caractères spéciaux
  • Utilisation de variables

Le paramètre --tags accepte une liste de paires clé:valeur séparées par des espaces. Remplacez <msdocs-tutorial-rg-00000000> par le nom de votre groupe de ressources et <msdocssa00000000> par le nom de votre compte de stockage 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"

Si vous ne voulez pas remplacer les balises précédentes dans cette étape du tutoriel, utilisez la commande az tag update en définissant le paramètre --operation sur 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

Comparer des scripts propres à l’environnement

Examinez plus en détail ces différences de script. Ces exemples décrivent les différences de guillemets pour :

  • Passer une chaîne JSON comme valeur de paramètre
  • Filtrer les résultats avec le paramètre --query
    • Numéros
    • Valeurs booléennes
    • Dates

Exemple de paramètre contenant une chaîne JSON. Ce script est fourni pour référence ultérieure, car nous n’utilisons pas az rest dans ce tutoriel.

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

Exemple de filtrage pour une valeur numérique. À moins que vous ayez une machine virtuelle dans votre abonnement actuel, cet exemple est fourni pour référence ultérieure.

az vm list --resource-group <myResourceGroup> \
           --query "[?storageProfile.osDisk.diskSizeGb >=\`50\`].{Name:name, admin:osProfile.adminUsername, DiskSize:storageProfile.osDisk.diskSizeGb}" \
           --output table

Exemple de filtrage d’une valeur booléenne en utilisant le compte de stockage créé dans ce tutoriel.

az storage account list --resource-group <msdocs-tutorial-rg-00000000> \
    --query "[?allowBlobPublicAccess == \`true\`].id"

Exemples de filtrage d’une date en utilisant le compte de stockage créé dans ce tutoriel.

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

Commandes de référence Azure CLI de débogage

Utiliser le paramètre --debug

Azure CLI offre un paramètre --debug qui peut être utilisé avec n’importe quelle commande. La sortie de débogage est étendue, mais elle vous donne plus d’informations sur les erreurs d’exécution. Utilisez la commande Bash clear pour supprimer la sortie de la console entre les tests.

Ces exemples montrent les arguments réels reçus par Azure CLI dans la syntaxe Python.

Cet exemple est correct dans Bash et PowerShell.

az '{"key":"value"}' --debug

Consultez ce qu’Azure CLI interprète dans la ligne Command arguments de la sortie.

Command arguments: ['{"key":"value"}', '--debug']

Ce deuxième exemple est également correct. Utilisez la commande Bash clear pour supprimer la sortie de la console entre les tests.

clear
az "{\"key\":\"value\"}" --debug
Command arguments: ['{"key":"value"}', '--debug']

Les deux exemples suivants sont incorrects, car les guillemets et les espaces sont interprétés par Bash.

Format incorrect Problème Sortie de la console
az {"key":"value"} --debug Guillemets simples ou caractères d’échappement manquants Arguments de commande : ['{key:value}', '--debug']
az {"key": "value"} --debug Guillemets simples ou caractères d’échappement manquants, et espaces supplémentaires Arguments de commande : ['{key:', 'value}', '--debug']

Utiliser la commande echo

Bien que --debug vous indique exactement ce qu’Azure CLI interprète, une deuxième option est de renvoyer la valeur d’une expression à votre console. Cette méthode est utile pour vérifier les résultats de --query, décrit en détail dans Remplir des variables à utiliser dans des scripts.

strExpression='{"key":"value"}'
echo $strExpression
{"key":"value"}

Dépannage

Voici des erreurs courantes quand une syntaxe de commande de référence Azure CLI n’est pas écrite correctement :

  • « Demande incorrecte ... {something} n’est pas valide » peut être dû à un espace, un guillemet simple ou double, ou des guillemets manquants.

  • « Jeton inattendu... » est vu quand il y a un espace ou un guillemet supplémentaire.

  • L’erreur « Valeur jmespath_type non valide » est souvent liée à des guillemets incorrects dans le paramètre --query.

  • L’erreur « La référence de variable n’est pas valide » est reçue quand une chaîne n’est pas correctement mise en forme en raison de la concaténation ou d’un caractère d’échappement manquant.

  • Les « arguments non reconnus » sont souvent provoqués par un caractère de continuation de ligne incorrect.

  • L’erreur « Expression manquante après l’opérateur unaire » est visible quand un caractère de continuation de ligne est manquant.

Obtenir plus d’informations

Vous voulez plus d’informations sur un des sujets abordés dans cette étape de tutoriel ? Utilisez les liens de ce tableau pour en savoir plus.

Objet En savoir plus
Différences de scripts Utilisation des guillemets dans Bash
Utilisation des guillemets dans PowerShell
Problèmes de guillemets avec PowerShell
Conseils pour la ligne de commande Windows
Paramètres Utiliser des guillemets dans les paramètres Azure CLI
Trouver d’autres exemples de syntaxe pour Bash, PowerShell et Cmd dans Sortie de commande de requête avec JMESPath

étape suivante

Maintenant que vous avez appris à écrire la syntaxe Azure CLI pour Bash, PowerShell et Cmd, passez à l’étape suivante pour apprendre à extraire des valeurs dans une variable.