Поделиться через


Узнайте различия в синтаксисе Azure CLI в Bash, PowerShell и Cmd.

Команды Azure CLI могут выполняться в обеих средах: Bash, PowerShell, и в оболочке команд Windows (Cmd). Однако существуют тонкие различия в сценариях. На этом этапе учебника узнайте, как создать свою первую учетную запись хранения Azure и отформатировать значения параметров для всех трех языков сценариев.

Prerequisites

  • Вы выполнили все необходимые условия, чтобы подготовить вашу среду.
  • У вас есть доступ к группе ресурсов с contributor или более высокими разрешениями на уровне группы ресурсов.

Be aware of line continuation characters

Большинство документации Azure CLI написано и протестировано в Bash с использованием Azure Cloud Shell. Одним из первых моментов, которые следует помнить при копировании синтаксиса Azure CLI, является проверка символов продолжения строки для выбранного вами языка сценариев, так как они не являются взаимозаменяемыми.

язык сценариев Line continuation character
Bash Backslash (\)
PowerShell Backtick (`)
Cmd Морковь (^)

Tip

Кнопка Копировать в правом верхнем углу блоков кода Azure CLI намеренно удаляет обратную наклонную черту (\) и обратный апостроф (`). If you want to copy a formatted code block, use your keyboard or mouse to select and copy the example.

Понимание различий в синтаксисе при использовании переменных

The syntax for using variables varies slightly between scripting languages. Вот сравнение:

Use case Bash PowerShell Cmd
Создать переменную variableName=varValue $variableName="varValue" set variableName=varValue
Use variable as parameter value variableName $variableName %variableName%
Используйте переменную в параметре --query. '$variableName' '$variableName' '$variableName'

Существует несколько различных способов вернуть информацию о переменной на экран консоли, но echo работает в большинстве случаев. Вот сравнение:

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

На третьем этапе, Заполните переменные для использования в скриптах, вы работаете с подробными примерами синтаксиса переменных.

Learn about quoting differences between scripting languages

Каждый параметр Azure CLI является строкой. Однако, каждый язык сценариев имеет свои собственные правила для обработки одинарных и двойных кавычек, пробелов и значений параметров.

Значение строки Azure CLI PowerShell Cmd
Текст 'text' or "text" «text» или «текст» "текст"
Номер \`50\` ``50`` `50`
Boolean истина ложь истина
Дата '2021-11-15' '2021-11-15' '2021-11-15'
JSON '{"key":"value"}' or "{"key":"value"}" '{"key": "value"}' or "{`"key`": `"value`"}" or "{""key"": ""value""}" {"ключ":"значение"}

Параметры командной строки Azure CLI принимают значения в виде списка, разделенного пробелами. Это влияет на цитирование.

  • Нецитируемый список, разделенный пробелами: --имяПараметра firstValue secondValue
  • Список в кавычках, разделенный пробелами: --parameterName "firstValue" "secondValue"
  • Значения, содержащие пробел: --parameterName "value1a value1b" "value2a value2b" "value3"

Если вы не уверены, как ваша строка будет оцениваться вашим языком сценариев, верните значение строки в консоль или используйте --debug, как объяснено в разделе Отладка команд справки Azure CLI.

Создайте учетную запись хранилища, чтобы применить изученное вами.

Остальная часть этого шага руководства демонстрирует правила использования кавычек в командах Azure CLI и использует группу ресурсов, созданную в разделе Подготовка вашей среды для Azure CLI. Замените <msdocs-tutorial-rg-00000000> на имя вашей группы ресурсов.

Создайте учетную запись хранилища Azure для использования в этом руководстве. This example assigns a random ID to the storage account name, but if you want to use a different name, see Storage account overview for storage account name rules.

Important

Прежде чем вы сможете создать учетную запись хранилища, поставщик ресурсов Microsoft.Storage должен быть зарегистрирован в вашей подписке. Чтобы узнать о регистрации типов ресурсов, см. Register resource provider.

Этот следующий пример сценария демонстрирует синтаксис, специфический для языка сценариев, для следующего:

  • Продолжение строки
  • Использование переменной
  • Случайные идентификаторы
  • 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

Примечание

Вы получили ошибку «Subscription not found»? Эта ошибка возникает, когда Microsoft.Storage не зарегистрирован в активной подписке. To register a resource provider, see Azure resource providers and types.

Azure CLI возвращает более 100 строк JSON в качестве вывода, когда создается новый учетная запись хранения. Следующий вывод словаря JSON содержит поля, которые опущены ради краткости.

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

Create tags to practice quoting differences

Используя az storage account update, добавьте теги, чтобы помочь вам идентифицировать вашу учетную запись хранилища и узнать о различиях в кавычках. Эти примеры скриптов демонстрируют синтаксис, специфичный для языков программирования, для следующего:

  • Значения, содержащие пробелы
  • Цитирование пробелов
  • Экранирование специальных символов
  • Использование переменных

Параметр --tags принимает список пар ключ:значение, разделённых пробелами. Замените <msdocs-tutorial-rg-00000000> на имя вашей группы ресурсов и <msdocssa00000000> на имя вашей учетной записи хранения 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"

Если вы не хотите перезаписывать предыдущие теги, выполняя этот шаг учебника, используйте команду az tag update, установив параметр --operation в 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

Сравните больше скриптов, специфичных для языков программирования

Более пристально рассмотрите эти различия в сценариях. These examples demonstrate quoting differences for the following:

  • Pass a JSON string as a parameter value
  • Отфильтруйте результаты с помощью параметра --query
    • Numbers
    • Boolean values
    • Даты

Example of a parameter containing a JSON string. Этот скрипт предоставлен для дальнейшего использования, так как в этом учебном пособии мы не работаем с az rest.

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

Пример фильтрации по числовому значению. За исключением случаев, когда у вас уже есть виртуальная машина в вашей текущей подписке, этот пример дан для будущей справки.

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

Пример фильтрации булевого значения с использованием аккаунта хранилища, созданного в этом руководстве.

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

Примеры фильтрации даты с использованием учетной записи хранилища, созданной в этом руководстве.

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

Отладка команд справки Azure CLI

Используйте параметр --debug

Azure CLI предоставляет параметр --debug, который можно использовать с любой командой. Отладочный вывод обширен, но он предоставляет информацию, включая следующее:

  • Аргументы команды (значения параметров), как интерпретируется вашим языком сценариев
  • Местоположение вашего лог-файла
  • Детали вызова API
  • Execution errors

Если при работе с командами Azure CLI у вас возникают трудности с пониманием и исправлением ошибки выполнения, --debug — это ваш ответ, чтобы увидеть шаги, которые выполняет Azure CLI.

Вот небольшая часть результата отладки при создании учетной записи хранилища.

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

Для получения дополнительных советов по устранению неполадок см. Устранение неполадок Azure CLI.

Используйте команду echo

Хотя --debug точно сообщает, что интерпретирует Azure CLI, второй вариант — вернуть значение выражения в вашу консоль. This method is helpful when verifying the results of --query that is covered in detail in Populate variables for use in scripts.

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

Устранение неполадок

Вот распространенные ошибки, которые возникают, когда синтаксис команды ссылки Azure CLI написан неправильно:

  • "Bad request ...{something} is invalid" might be caused by a space, single or double quotation mark, or lack of a quote.

  • "Unexpected token..." is seen when there's an extra space or quote.

  • Ошибка «Invalid jmespath_type value» часто возникает из-за неправильного заключения в кавычки в параметре --query.

  • "Variable reference is not valid" is received when a string isn't formatted properly often due to concatenation or a missing escape character.

  • "Unrecognized arguments" is often caused by an incorrect line continuation character.

  • "Missing expression after unary operator" is seen when a line continuation character is missing.

For additional troubleshooting tips, see Troubleshooting Azure CLI commands.

Узнать больше деталей

Do you want more detail on one of the subjects covered in this tutorial step? Используйте ссылки в этой таблице, чтобы узнать больше.

Subject Learn more
Scripting differences Различия в кавычках между языками сценариев
Bash quoting rules
Правила кавычек PowerShell
Considerations for running the Azure CLI in a PowerShell scripting language
Windows command-line tips
Parameters Используйте кавычки в параметрах Azure CLI
Найдите больше примеров синтаксиса Bash, PowerShell и Cmd в Запрос выхода команды с использованием JMESPath
Поиск и устранение неисправностей Устранение неполадок команд Azure CLI

Следующий шаг

Теперь, когда вы научились писать синтаксис Azure CLI для Bash, PowerShell и Cmd, перейдите к следующему шагу, чтобы узнать, как извлекать значения в переменную.