Partager via


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 langages de script Bash, PowerShell et Windows Command Shell (Cmd ). Toutefois, il existe des différences subtiles de script. Dans cette étape du tutoriel, découvrez comment créer vos premières valeurs de paramètres de compte et de format Stockage Azure pour les trois langages de script.

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. 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 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 de l’utilisation de variables varie légèrement entre les langages de script. 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 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 la gestion des guillemets simples et doubles, des espaces et des 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"}' ou « {'"key'" » : '"value'"} » ou « {"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 sera é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 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.

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

Remarque

Vous venez de recevoir une erreur « Abonnement introuvable » ? Cette erreur se produit lorsqu’elle Microsoft.Storage n’est pas inscrite 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 à 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 illustrent la syntaxe spécifique au langage de script pour les éléments suivants :

  • 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 d’autres scripts spécifiques au langage

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 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, lorsque vous utilisez des commandes Azure CLI, vous rencontrez des difficultés à comprendre et corriger une erreur d’exécution, --debug répondez à vos questions pour voir les étapes d’exécution d’Azure CLI.

Voici une petite 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 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.

Pour obtenir des conseils de dépannage supplémentaires, consultez Résolution des problèmes liés aux commandes Azure CLI.

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 Guillemets de différences entre les langages de script
Règles de guillemets Bash
Règles de guillemets 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 d’autres exemples de syntaxe pour Bash, PowerShell et Cmd dans Sortie de commande de requête avec JMESPath
Dépannage 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.