Partager via


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

Les commandes Azure CLI peuvent être exécutées dans les langages de script Bash, PowerShell et shell de commande Windows (cmd). Toutefois, il existe des différences subtiles de script. Dans cette étape du tutoriel, apprenez à créer votre premier compte de stockage Azure et à formater les valeurs de paramètres pour les trois langages de script.

Conditions préalables

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

Soyez attentif aux caractères indiquant la continuation de ligne

La plupart de la documentation Azure CLI est écrite et testée dans Bash avec Azure Cloud Shell. L’une des premières choses à mémoriser lors de la copie de la syntaxe Azure CLI consiste à vérifier les caractères de continuation de ligne pour votre langage de script choisi, car ils ne sont pas interchangeables.

Langage de script Caractère de continuation de ligne
Bash Barre oblique inverse (\)
PowerShell Accent grave inversé (`)
Cmd Caret (^)

Conseil / Astuce

Le bouton Copier en haut à droite des blocs de code Azure CLI supprime la barre oblique inverse (\) et le guillemet inverse (`) par conception. Pour 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 de l’utilisation de variables varie légèrement entre les langages de script. Voici une comparaison :

Cas d’utilisation Cogner PowerShell Cmd
Créer une variable variableName=varValue $variableName="varValue" définir variableNom=valeurVar
Utiliser une variable comme valeur de paramètre nom_variable $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, remplissez des variables à utiliser dans des scripts, vous utilisez des exemples détaillés de syntaxe variable.

Découvrez les différences de citation entre les langages de script

Chaque paramètre Azure CLI est une chaîne. Toutefois, chaque langage de script 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 (Interface de ligne de commande Azure) PowerShell Cmd
Texto 'text' ou « text » 'text' ou « text » « texte »
Numéro \'50\' ''50'' '50'
Booléen `vrai` ''false'' vrai
Date (Jour/Mois/Année) 15/11/2021 15/11/2021 15/11/2021
JSON '{"key":"value"}' ou "{"key":"value"}" '{"key » : « value"}' ou « {'"key'" » : '"value'"} » ou « {"key"" » : « "value""} » {"clé":"valeur"}

De nombreux paramètres Azure CLI acceptent une liste de valeurs séparées par un espace. Ce format influence 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 langage de script, retournez la valeur d’une chaîne à votre console ou utilisez --debug comme expliqué dans les commandes de référence Azure CLI Debug.

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

Le reste de cette étape du tutoriel démontre l'utilisation des guillemets dans les commandes d'Azure CLI, à l’aide du groupe de ressources créé dans la section Préparer votre environnement pour l'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 affecte un ID aléatoire au nom du compte de stockage. Toutefois, si vous souhaitez utiliser un autre nom, reportez-vous à la vue d’ensemble du compte de stockage pour les règles de nom de compte de stockage.

Important

Avant de pouvoir créer un compte de stockage, le Microsoft.Storage fournisseur de ressources doit être inscrit dans votre abonnement. Pour en savoir plus sur l’inscription des types de ressources, consultez Inscrire un fournisseur de ressources.

Cet exemple de script suivant illustre la syntaxe spécifique au langage de script pour les éléments suivants :

  • Continuation de texte
  • 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

Remarque

Avez-vous reçu une erreur « Abonnement introuvable » ? Cette erreur se produit quand Microsoft.Storage n’est pas inscrit dans l’abonnement actif. Pour inscrire un fournisseur de ressources, consultez fournisseurs et types de ressources Azure.

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 à citer des différences.

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 syntaxe des commandes. Ces exemples de script illustrent la syntaxe spécifique au langage de script pour les éléments suivants :

  • Valeurs contenant des espaces
  • Citer des 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 d’autres scripts spécifiques au langage

Examinez plus en détail ces différences de script. Ces exemples démontrent les différences dans l'utilisation des 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 une référence ultérieure, car nous ne travaillons pas avec az rest dans ce didacticiel.

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

Déboguer les commandes de référence d'Azure CLI

Utiliser le paramètre de débogage

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 fournit des informations, notamment les suivantes :

  • Arguments de commande (valeurs de paramètre) interprétés par votre langage de script
  • Emplacement de votre fichier journal
  • Détails de l’appel d’API
  • Erreurs d’exécution

Si vous rencontrez des difficultés à comprendre et corriger une erreur d’exécution lors de l’utilisation des commandes Azure CLI, --debug répond à vos questions pour voir les étapes d’exécution d’Azure CLI.

Voici une partie de la sortie de débogage lors de la création d’un compte de stockage :

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

Pour plus d’informations sur la résolution des problèmes, consultez Résolution des problèmes liés à Azure CLI.

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 lors de la vérification des résultats du --query, qui est abordé en détail dans les variables de remplissage à utiliser dans les scripts.

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

Résolution des problèmes

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... » s'affiche quand il y a un espace ou un guillemet en trop.
  • L’erreur « Valeur jmespath_type non valide » est souvent due à une mauvaise utilisation des guillemets dans le paramètre --query.
  • « La référence de variable n’est pas valide » est reçue lorsqu’une chaîne n’est pas correctement mise en forme, souvent 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 » se produit lorsqu'un caractère de continuation de ligne est manquant.

Pour plus d’informations sur la résolution des problèmes, consultez Résolution des problèmes liés aux commandes Azure CLI.

Obtenir plus de détails

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.

Sujet Pour en savoir plus
Différences de scripts Citer les différences entre les langages de script
Règles de guillemets Bash
Règles d'utilisation des guillemets dans PowerShell
Considérations relatives à l’exécution d’Azure CLI dans un langage de script PowerShell
Conseils pour la ligne de commande Windows
Paramètres Utiliser des guillemets dans les paramètres Azure CLI
Trouver des exemples supplémentaires de syntaxe Bash, PowerShell et Cmd dans la sortie de commande de requête utilisant JMESPath
Résolution des problèmes Résolution des problèmes liés aux commandes Azure CLI

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