Compartir a través de


Obtenga información sobre las diferencias de sintaxis de la CLI de Azure en Bash, PowerShell y Cmd.

Los comandos de la CLI de Azure se pueden ejecutar en los lenguajes de scripting bash, PowerShell y el shell de comandos de Windows (cmd). Sin embargo, hay diferencias sutiles de scripting. En este paso del tutorial, aprenderá a crear tu primera cuenta en Azure Storage y formatear valores de parámetros para los tres lenguajes de scripting.

Prerrequisitos

  • Ha completado los requisitos previos para preparar el entorno.
  • Usted tiene acceso a un grupo de recursos con permisos de contributor o superiores a nivel de grupo de recursos.

Tenga en cuenta los caracteres de continuación de línea

La mayoría de la documentación de la CLI de Azure se escribe y prueba en Bash mediante Azure Cloud Shell. Una de las primeras cosas que debe recordar al copiar la sintaxis de la CLI de Azure es comprobar los caracteres de continuación de línea para el lenguaje de scripting elegido, ya que no son intercambiables.

Lenguaje de scripting Carácter de continuación de línea
Juerga Barra diagonal inversa (\)
PowerShell Acento grave (`)
Cmd Intercalación (^)

Sugerencia

El botón Copiar de la esquina superior derecha de los bloques de código de la CLI de Azure quita la barra diagonal inversa (\) y la tilde aguda (`) de forma predeterminada. Para copiar un bloque de código con formato, use el teclado o el mouse para seleccionar y copiar el ejemplo.

Comprender las diferencias de sintaxis al usar variables

La sintaxis para usar variables varía ligeramente entre los lenguajes de scripting. Esta es una comparación:

Caso de uso Juerga PowerShell Cmd
Creación de variables variableName=varValue $variableName="varValue" set variableName=varValue
Uso de la variable como valor de parámetro nombre_de_variable $variableName %variableName%
Uso de la variable en el parámetro --query "$variableName" "$variableName" "$variableName"

Hay varias maneras diferentes de mostrar información de variables en la pantalla de la consola, pero echo funciona en la mayoría de las circunstancias. Esta es una comparación:

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

En el paso 3, Rellenar variables para su uso en scripts, se trabaja en ejemplos detallados de sintaxis de variables.

Más información sobre las diferencias entre comillas entre lenguajes de scripting

Cada parámetro de la CLI de Azure es una cadena. Sin embargo, cada lenguaje de scripting tiene sus propias reglas para controlar comillas simples y dobles, espacios y valores de parámetro.

Valor de cadena CLI de Azure PowerShell Cmd
Mensaje de texto 'text' o "text" 'text' o "text" "texto"
Número \'50\' ''50'' '50'
Booleano \'true\' falso verdadero
Fecha '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"}

Muchos parámetros de la CLI de Azure aceptan una lista de valores separados por espacios. Este formato afecta al proceso de citar.

  • Lista sin comillas, separada por espacios: --parameterName firstValue secondValue
  • Lista entrecomillada y separada por espacios: --parameterName "firstValue" "secondValue"
  • Valores que contienen un espacio: --parameterName "value1a value1b" "value2a value2b" "value3"

Si no está seguro de cómo evalúa la cadena el lenguaje de scripting, devuelva el valor de una cadena a la consola o use --debug como se explica en Depurar comandos de referencia de la CLI de Azure.

Creación de una cuenta de almacenamiento para aplicar lo que ha aprendido

En el resto de este paso del tutorial se demuestran las reglas de uso de comillas en los comandos de la CLI de Azure mediante el grupo de recursos creado en Preparar su entorno para la CLI de Azure. Sustituya <msdocs-tutorial-rg-00000000> por el nombre del grupo de recursos.

Cree una cuenta de almacenamiento de Azure para usarla en este tutorial. En este ejemplo se asigna un identificador aleatorio al nombre de la cuenta de almacenamiento. Sin embargo, si desea usar un nombre diferente, consulte la información general de la cuenta de almacenamiento para conocer las reglas de nombre de la cuenta de almacenamiento.

Importante

Para poder crear una cuenta de almacenamiento, el Microsoft.Storage proveedor de recursos debe registrarse en la suscripción. Para más información sobre el registro de tipos de recursos, consulte Registro del proveedor de recursos.

En este siguiente ejemplo de script se muestra la sintaxis específica del lenguaje de scripting para lo siguiente:

  • Continuación de línea
  • Uso de variables
  • Identificadores aleatorios
  • El comando 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

Nota:

¿Recibió un error de "Suscripción no encontrada"? Este error se produce cuando Microsoft.Storage no está registrado en la suscripción activa. Para registrar un proveedor de recursos, consulte tipos y proveedores de recursos de Azure.

La CLI de Azure muestra más de 100 líneas de JSON como salida cuando se crea una nueva cuenta de almacenamiento. La siguiente salida del diccionario JSON tiene campos omitidos por brevedad.

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

Crear etiquetas para practicar citar diferencias

Con az storage account update, agregue etiquetas para ayudarle a identificar la cuenta de almacenamiento e informarse sobre las diferencias de cotización. Estos ejemplos de script muestran la sintaxis específica del lenguaje de scripting para lo siguiente:

  • Valores que contienen espacios
  • Citar espacios en blanco
  • Escape de caracteres especiales
  • Uso de variables

El parámetro --tags acepta una lista de valores clave:valor separados por espacios. Sustituya <msdocs-tutorial-rg-00000000> por el nombre del grupo de recursos y <msdocssa00000000> por el nombre de la cuenta de almacenamiento de 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 no desea sobrescribir etiquetas anteriores mientras trabaja en este paso del tutorial, use el comando az tag update y establezca el parámetro --operation en 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

Comparar más guiones específicos de lenguajes de script

Observe estas diferencias de script con más detalle. En estos ejemplos, se muestran las diferencias de comillas para lo siguiente:

  • Pasar una cadena JSON como un valor de parámetro
  • Filtrar resultados con el parámetro --query
    • Números
    • Valores booleanos
    • Fechas

Ejemplo de un parámetro que contiene una cadena JSON. Este script se da para futura referencia, ya que no estamos trabajando con az rest en este tutorial.

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

Ejemplo de filtrado para un valor numérico. A menos que tenga una máquina virtual en la suscripción actual, este ejemplo se da para referencia futura.

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

Ejemplo de filtrado de un valor booleano mediante la cuenta de almacenamiento creada en este tutorial.

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

Ejemplo de filtrado de una fecha mediante la cuenta de almacenamiento creada en este tutorial.

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

Depuración de comandos de referencia de la CLI de Azure

Usa el parámetro de depuración

La CLI de Azure ofrece un parámetro --debug que se puede usar con cualquier comando. La salida de depuración es extensa, pero proporciona información que incluye lo siguiente:

  • Argumentos de comando (valores de parámetro) según la interpretación de su lenguaje de secuencias de comandos
  • Ubicación del archivo de registro
  • Detalles de la llamada a la API
  • Errores de ejecución

Si tiene dificultades para comprender y corregir un error de ejecución al trabajar con comandos de la CLI de Azure, --debug es la respuesta para ver los pasos que está ejecutando la CLI de Azure.

Esta es una parte de la salida de depuración al crear una cuenta de almacenamiento:

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

Para más sugerencias de solución de problemas, consulte Solución de problemas de la CLI de Azure.

Uso del comando echo

Aunque --debug indica exactamente qué interpreta la CLI de Azure, una segunda opción es devolver el valor de una expresión a la consola. Este método es útil al comprobar los resultados de --query, que se trata en detalle en Rellenar variables para su uso en scripts.

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

Solución de problemas

Estos son errores comunes cuando una sintaxis de comandos de referencia de la CLI de Azure no está escrita correctamente:

  • "Solicitud incorrecta ...{algo} no es válido" puede deberse a un espacio, el uso de comillas simples o dobles, o a la falta de una comilla.
  • "Token inesperado..." aparece cuando hay un espacio o comillas adicionales.
  • El error "Valor de tipo jmespath no válido" a menudo es causado por el uso incorrecto de comillas en el parámetro --query.
  • "La referencia de variable no es válida" se recibe cuando una cadena no tiene el formato correcto, a menudo debido a la concatenación o a un carácter de escape que falta.
  • Los "argumentos no reconocidos" suelen deberse a un carácter de continuación de línea incorrecto.
  • El error "Falta una expresión después del operador unario" se produce cuando falta un carácter de continuación de línea.

Para obtener más sugerencias de solución de problemas, consulte Solución de problemas de comandos de la CLI de Azure.

Obtenga más detalles

¿Desea obtener más detalles sobre uno de los temas tratados en este paso del tutorial? Use los vínculos de esta tabla para obtener más información.

Asunto Aprende más
Diferencias de guionizado Citando diferencias entre los lenguajes de scripting
Reglas de comillas de Bash
Reglas de comillas de PowerShell
Consideraciones para ejecutar la CLI de Azure en un lenguaje de scripting de PowerShell
Sugerencias para la línea de comandos de Windows
Parámetros Uso de comillas en parámetros de la CLI de Azure
Busque más ejemplos de sintaxis de Bash, PowerShell y Cmd en la salida del comando Query mediante JMESPath
Solución de problemas Solución de problemas de comandos de la CLI de Azure

Paso siguiente

Ahora que ha aprendido a escribir la sintaxis de la CLI de Azure para Bash, PowerShell y Cmd, continúe con el paso siguiente para aprender a extraer valores en una variable.