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


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

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

Предпосылки

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

Помните о символах продолжения строки

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

Язык сценария Символ продолжения строки
Бить Обратная косая черта (\)
PowerShell Обратная кавычка (`)
Cmd Caret (^)

Подсказка

Кнопка Копировать в правом верхнем углу блоков кода Azure CLI намеренно удаляет обратную наклонную черту (\) и обратный апостроф (`). Чтобы скопировать отформатированный блок кода, используйте клавиатуру или мышь для выбора и копирования примера.

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

Синтаксис для использования переменных немного отличается между языками сценариев. Вот сравнение:

Сценарий использования Бить PowerShell Командная строка (Cmd)
Создать переменную variableName=varValue $variableName="varValue" установить переменную variableName=varValue
Использование переменной в качестве значения параметра имя_переменной $variableName %variableName%
Используйте переменную в параметре --query. "$variableName" "$variableName" "$variableName"

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

  • Bash: выполнить $varResourceGroup
  • PowerShell: Write-Output $varResourceGroup
  • Cmd: echo %varResourceGroup%

На шаге 3 заполнение переменных для использования в скриптах выполняется с помощью подробных примеров синтаксиса переменных.

Узнайте о различиях в кавычках между языками сценариев

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

Значение строки Azure CLI (Интерфейс командной строки для Azure) PowerShell Командная строка (Cmd)
Текст «текст» или «текст» «текст» или «текст» "текст"
Номер \'50\' ''50'' '50'
Булев истина ложь истина
Дата '2021-11-15' '2021-11-15' '2021-11-15'
JSON (JavaScript Object Notation) "{"key":"value"}" или "{"key":"value"}" "{"key": "value"}" или "{`"key`": `"value`"}" или "{""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 для использования в этом руководстве. В этом примере присваивается случайный идентификатор имени учетной записи хранения. Однако если вы хотите использовать другое имя, ознакомьтесь с общими сведениями о правилах имени учетной записи хранения.

Это важно

Прежде чем вы сможете создать учетную запись хранилища, поставщик ресурсов 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

Замечание

Вы получили сообщение об ошибке "Подписка не найдена"? Эта ошибка возникает, когда Microsoft.Storage не зарегистрирована в активной подписке. Для регистрации поставщика ресурсов см. раздел поставщики ресурсов Azure и их типы.

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

Создание тегов для практики использования различий в кавычках.

Используя 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

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

Более пристально рассмотрите эти различия в сценариях. В этих примерах демонстрируются различия в кавычках для следующих случаев:

  • Передача строки JSON в качестве значения параметра
  • Отфильтруйте результаты с помощью параметра --query
    • Числа
    • Логические значения
    • Даты

Пример параметра, содержащего строку JSON. Этот скрипт предоставляется для дальнейшего использования, так как мы не работаем с 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

Использование параметра отладки

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

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

Если при работе с командами 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, второй вариант — вернуть значение выражения в вашу консоль. Этот метод полезен при проверке результатов --query, которые подробно описаны в разделе "Заполнение переменных" для использования в скриптах.

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

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

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

  • "Неправильный запрос ... {что-то} недопустимо" может быть вызвано пробелом, одним или двойным кавычками или отсутствием кавычки.
  • "Непредвиденный токен..." отображается, когда есть дополнительное пространство или цитата.
  • Ошибка «Invalid jmespath_type value» часто возникает из-за неправильного заключения в кавычки в параметре --query.
  • "Ссылка на переменную недопустима" получается, если строка не форматируется правильно, часто из-за объединения или отсутствующих escape-символов.
  • "Нераспознанные аргументы" часто возникают из-за некорректного символа для продолжения строки.
  • "Сообщение 'Отсутствует выражение после унарного оператора' появляется, когда отсутствует символ продолжения строки."

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

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

Хотите подробнее об одном из тем, описанных на этом шаге руководства? Чтобы узнать больше, воспользуйтесь ссылками в этой таблице.

Тема Подробнее
Различия в скриптах Цитирование различий между языками сценариев
Правила цитирования в Bash
Правила кавычек PowerShell
Рекомендации по запуску Azure CLI на языке сценариев PowerShell
Советы по командной строке Windows
Параметры Используйте кавычки в параметрах Azure CLI
Найдите больше примеров синтаксиса для Bash, PowerShell и Cmd в результатах выполнения команды с использованием JMESPath
Устранение неполадок Устранение неполадок команд Azure CLI

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

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