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


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

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

Необходимые компоненты

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

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

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

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

Совет

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

Общие сведения о различиях синтаксиса при использовании переменных

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

Вариант использования Bash PowerShell Cmd
Создать переменную variableName=varValue $variableName="varValue" set variableName=varValue
Использование переменной в качестве значения параметра variableName $variableName %variableName%
Использование переменной в --query параметре "$variableName" "$variableName" "$variableName"

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

  • Bash: эхо $varResourceGroup
  • PowerShell: эхо $varResourceGroup
  • Cmd: echo %varResourceGroup%

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

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

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

«Строковое значение» Azure CLI PowerShell Cmd
Текст 'text' или "text" 'text' или "text" "text"
Число \'50\' ''50'' '50'
Логический \'true\' ''false'' 'true'
Дата '2021-11-15' '2021-11-15' '2021-11-15'
JSON "{"key":"value"}" или "{"key":"value"}" "{"key": "value"}" или "{"key": ""value"}" или "{"key": ""value"}" "{"key":"value"}"

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

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

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

Создание учетной записи хранения для применения полученных вами знаний

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

Создайте учетную запись хранения Azure для использования в этом руководстве. В этом примере присваивается случайный идентификатор имени учетной записи хранения, но если вы хотите использовать другое имя, ознакомьтесь с обзором учетной записи хранения для правил имени учетной записи хранения.

В следующем примере скрипта демонстрируется синтаксис для конкретного языка сценариев для следующего:

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

Использование --debug параметра

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:

  • "Неправильный запрос ... {что-то} недопустимо" может быть вызвано пробелом, одним или двойным кавычками или отсутствием кавычки.

  • "Непредвиденный токен..." отображается, когда есть дополнительное пространство или цитата.

  • Ошибка "Недопустимая jmespath_type значение" часто возникает из неправильного кавыка в параметре --query .

  • "Ссылка на переменную недопустима" получается, если строка не форматируется должным образом из-за объединения или отсутствующих escape-символов.

  • Нераспознанные аргументы часто вызваны неправильным символом продолжения строки.

  • "Отсутствует выражение после унарного оператора" отображается, когда отсутствует символ продолжения строки.

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

Дополнительные сведения

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

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

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

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