Сведения о различиях синтаксиса 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"}" |
Многие параметры 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
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
параметр, который можно использовать с любой командой. Выходные данные отладки обширны, но они предоставляют дополнительные сведения об ошибках выполнения. Используйте команду Bash clear
для удаления выходных данных консоли между тестами.
Эти примеры показывают фактические аргументы, полученные Azure CLI в синтаксисе Python.
Этот пример является правильным как в Bash, так и в PowerShell.
az '{"key":"value"}' --debug
Узнайте, что azure CLI интерпретирует в Command arguments
строке выходных данных.
Command arguments: ['{"key":"value"}', '--debug']
Этот второй пример также правильный. Используйте команду Bash clear
для удаления выходных данных консоли между тестами.
clear
az "{\"key\":\"value\"}" --debug
Command arguments: ['{"key":"value"}', '--debug']
Следующие два примера неверны, так как кавычки и пробелы интерпретируются Bash.
Неправильный формат | Проблема | Вывод на консоль |
---|---|---|
az {"key":"value"} --debug | Отсутствуют одиночные кавычки или escape-символы | Аргументы команд: ['{key:value}', '--debug'] |
az {"key": "value"} --debug | Отсутствующие одинарные кавычки или escape-символы и содержат дополнительное пространство | Аргументы команд: ['{key:', 'value}', '--debug'] |
Использование echo
команды
Несмотря --debug
на то, что точно интерпретирует Azure CLI, второй вариант — возвратить значение выражения в консоль. Этот метод полезен при проверке результатов --query
, которые подробно описаны в разделе "Заполнение переменных" для использования в скриптах.
strExpression='{"key":"value"}'
echo $strExpression
{"key":"value"}
Устранение неполадок
Ниже приведены распространенные ошибки при неправильном написании синтаксиса ссылочной команды Azure CLI:
"Неправильный запрос ... {что-то} недопустимо" может быть вызвано пробелом, одним или двойным кавычками или отсутствием кавычки.
"Непредвиденный токен..." отображается, когда есть дополнительное пространство или цитата.
Ошибка "Недопустимая jmespath_type значение" часто возникает из неправильного кавыка в параметре
--query
."Ссылка на переменную недопустима" получается, если строка не форматируется должным образом из-за объединения или отсутствующих escape-символов.
Нераспознанные аргументы часто вызваны неправильным символом продолжения строки.
"Отсутствует выражение после унарного оператора" отображается, когда отсутствует символ продолжения строки.
Дополнительные сведения
Хотите подробнее об одном из тем, описанных на этом шаге руководства? Чтобы узнать больше, воспользуйтесь ссылками в этой таблице.
Тема | Подробнее |
---|---|
Различия в скриптах | Bash quoting |
Цитата PowerShell | |
Проблемы с кавыканиями в PowerShell | |
Советы по командной строке Windows | |
Параметры | Использование кавычки в параметрах Azure CLI |
Дополнительные примеры синтаксиса Bash, PowerShell и Cmd в выходных данных команды запроса с помощью JMESPath |
Следующий шаг
Теперь, когда вы узнали, как написать синтаксис Azure CLI для Bash, PowerShell и Cmd, перейдите к следующему шагу, чтобы узнать, как извлечь значения в переменную.