Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Azure CLI использует --query
параметр для выполнения запроса JMESPath в результатах команд. JMESPath — это язык запросов для JSON, предоставляющий возможность выбирать и изменять данные из выходных данных CLI.
Все команды в Azure CLI поддерживают этот параметр --query
. В этой статье описывается, как использовать функции JMESPath и приведены примеры запросов. Узнайте о концепциях JMESPath, которые полезны для запроса на вкладке концепций. Примеры запросов JMESPath см. на вкладке примеров.
Azure CLI использует запросы для выбора и изменения выходных данных команд Azure CLI. Запросы выполняются на стороне клиента в возвращаемом объекте JSON команды Azure CLI до любого форматирования отображения.
Escape-символы, необходимые в запросах, отличаются для разных сред. Рекомендуется выполнять запросы в Azure Cloud Shell или cmd, так как эти оболочки требуют меньше escape-символов. Чтобы убедиться, что примеры запросов синтаксически правильны, выберите вкладку для используемой оболочки.
Результаты CLI для словаря и списка
Результаты команды CLI сначала рассматриваются как JSON для запросов, даже если выходной формат отличается от JSON. Результаты CLI — это массив JSON или словарь. Массивы представляют собой последовательности объектов, которые можно индексировать, а словари являются неупорядоченными объектами, к которым обращаются ключи.
Это пример массива:
[
1,
2,
3
]
Это пример словаря:
{
"isRunning": false,
"time": "12:00",
"number": 1
}
Команды, которые могут возвращать несколько объектов, возвращают массив и команды, которые всегда возвращают только один объект, возвращают словарь.
Получение свойств в словаре
Работа с результатами словаря позволяет получить доступ к свойствам верхнего уровня только с помощью ключа. Символ .
(subexpression) используется для доступа к свойствам вложенных словарей. Прежде чем вводить запросы, просмотрите неизмененные выходные данные команды az vm show :
az vm show --resource-group QueryDemo --name TestVM
Команда выводит словарь. Некоторое содержимое опущено.
{
"additionalCapabilities": null,
"availabilitySet": null,
"diagnosticsProfile": {
"bootDiagnostics": {
"enabled": true,
"storageUri": "https://xxxxxx.blob.core.windows.net/"
}
},
...
"osProfile": {
"adminPassword": null,
"adminUsername": "azureuser",
"allowExtensionOperations": true,
"computerName": "TestVM",
"customData": null,
"linuxConfiguration": {
"disablePasswordAuthentication": true,
"provisionVmAgent": true,
"ssh": {
"publicKeys": [
{
"keyData": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMobZNJTqgjWn/IB5xlilvE4Y+BMYpqkDnGRUcA0g9BYPgrGSQquCES37v2e3JmpfDPHFsaR+CPKlVr2GoVJMMHeRcMJhj50ZWq0hAnkJBhlZVWy8S7dwdGAqPyPmWM2iJDCVMVrLITAJCno47O4Ees7RCH6ku7kU86b1NOanvrNwqTHr14wtnLhgZ0gQ5GV1oLWvMEVg1YFMIgPRkTsSQKWCG5lLqQ45aU/4NMJoUxGyJTL9i8YxMavaB1Z2npfTQDQo9+womZ7SXzHaIWC858gWNl9e5UFyHDnTEDc14hKkf1CqnGJVcCJkmSfmrrHk/CkmF0ZT3whTHO1DhJTtV stramer@contoso",
"path": "/home/azureuser/.ssh/authorized_keys"
}
]
}
},
"secrets": [],
"windowsConfiguration": null
},
....
}
Следующая команда получает открытые ключи SSH, авторизованные для подключения к виртуальной машине, добавив запрос:
az vm show --resource-group QueryDemo --name TestVM --query "osProfile.linuxConfiguration.ssh.publicKeys"
[
{
"keyData": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMobZNJTqgjWn/IB5xlilvE4Y+BMYpqkDnGRUcA0g9BYPgrGSQquCES37v2e3JmpfDPHFsaR+CPKlVr2GoVJMMHeRcMJhj50ZWq0hAnkJBhlZVWy8S7dwdGAqPyPmWM2iJDCVMVrLITAJCno47O4Ees7RCH6ku7kU86b1NOanvrNwqTHr14wtnLhgZ0gQ5GV1oLWvMEVg1YFMIgPRkTsSQKWCG5lLqQ45aU/4NMJoUxGyJTL9i8YxMavaB1Z2npfTQDQo9+womZ7SXzHaIWC858gWNl9e5UFyHDnTEDc14hKkf1CqnGJVcCJkmSfmrrHk/CkmF0ZT3whTHO1DhJTtV stramer@contoso",
"path": "/home/azureuser/.ssh/authorized_keys"
}
]
Запросы чувствительны к регистру символов. Например, изменение "osProfile" на "OsProfile" в предыдущем запросе не возвращает правильные результаты.
Получение нескольких значений
Чтобы получить несколько свойств, поместите выражения, разделенные запятыми в квадратных скобках (список с несколькими выборками[ ]
). Следующая команда получает имя виртуальной машины, пользователя администратора и ключ SSH одновременно:
az vm show --resource-group QueryDemo --name TestVM --query "[name, osProfile.adminUsername, osProfile.linuxConfiguration.ssh.publicKeys[0].keyData]"
[
"TestVM",
"azureuser",
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMobZNJTqgjWn/IB5xlilvE4Y+BMYpqkDnGRUcA0g9BYPgrGSQquCES37v2e3JmpfDPHFsaR+CPKlVr2GoVJMMHeRcMJhj50ZWq0hAnkJBhlZVWy8S7dwdGAqPyPmWM2iJDCVMVrLITAJCno47O4Ees7RCH6ku7kU86b1NOanvrNwqTHr14wtnLhgZ0gQ5GV1oLWvMEVg1YFMIgPRkTsSQKWCG5lLqQ45aU/4NMJoUxGyJTL9i8YxMavaB1Z2npfTQDQo9+womZ7SXzHaIWC858gWNl9e5UFyHDnTEDc14hKkf1CqnGJVcCJkmSfmrrHk/CkmF0ZT3whTHO1DhJTtV stramer@contoso"
]
Эти значения перечислены в результирующем массиве в том порядке, в который они были даны в запросе. Так как результат является массивом, ключи, связанные с результатами, отсутствуют. Чтобы получить словарь вместо массива, см. следующий раздел.
Переименование свойств в запросе
Чтобы получить словарь вместо массива при запросе на несколько значений, используйте оператор { }
.
Формат хэша для множественного выбора - {displayName:JMESPathExpression, ...}
.
displayName
— строка, показанная в выходных данных, и JMESPathExpression
является выражением JMESPath для вычисления. Измените пример из последнего раздела, изменив список с несколькими выборками на хэш:
Примечание.
Если вы решили использовать пробел в новом имени столбца, например VM name
, вместо VMName
, правила цитирования изменяются как в Bash, так и в PowerShell. См. Пропуск пробелов в параметрах Azure CLI для примеров.
az vm show --resource-group QueryDemo --name TestVM --query "{VMName:name, admin:osProfile.adminUsername, sshKey:osProfile.linuxConfiguration.ssh.publicKeys[0].keyData}"
{
"VMName": "TestVM",
"admin": "azureuser",
"ssh-key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMobZNJTqgjWn/IB5xlilvE4Y+BMYpqkDnGRUcA0g9BYPgrGSQquCES37v2e3JmpfDPHFsaR+CPKlVr2GoVJMMHeRcMJhj50ZWq0hAnkJBhlZVWy8S7dwdGAqPyPmWM2iJDCVMVrLITAJCno47O4Ees7RCH6ku7kU86b1NOanvrNwqTHr14wtnLhgZ0gQ5GV1oLWvMEVg1YFMIgPRkTsSQKWCG5lLqQ45aU/4NMJoUxGyJTL9i8YxMavaB1Z2npfTQDQo9+womZ7SXzHaIWC858gWNl9e5UFyHDnTEDc14hKkf1CqnGJVcCJkmSfmrrHk/CkmF0ZT3whTHO1DhJTtV stramer@contoso"
}
Получение свойств в массиве
Массив не имеет собственных свойств, но его можно индексировать. Эта функция показана в последнем примере с выражением publicKeys[0]
, которое получает первый элемент массива publicKeys
. Нет гарантии, что выходные данные CLI упорядочены, поэтому не используйте индексирование, если вы не уверены в порядке или не заботитесь о том, какой элемент вы получаете. Чтобы получить доступ к свойствам элементов в массиве, выполните одну из двух операций: выравнивание или фильтрацию. В этом разделе описывается, как развернуть массив.
Выравнивание массива []
выполняется с помощью оператора JMESPath. Все выражения после оператора []
применяются к каждому элементу в текущем массиве.
Если []
появится в начале запроса, он сглаживает результат команды CLI. Результаты az vm list
можно проверить с помощью этой функции.
Следующий запрос получает имя, ОС и имя администратора для каждой виртуальной машины в группе ресурсов:
az vm list --resource-group QueryDemo --query "[].{Name:name, OS:storageProfile.osDisk.osType, admin:osProfile.adminUsername}"
[
{
"Name": "Test-2",
"OS": "Linux",
"admin": "sttramer"
},
{
"Name": "TestVM",
"OS": "Linux",
"admin": "azureuser"
},
{
"Name": "WinTest",
"OS": "Windows",
"admin": "winadmin"
}
]
Любой массив может быть выровнен, а не только результат верхнего уровня, возвращаемый командой. В последнем разделе выражение osProfile.linuxConfiguration.ssh.publicKeys[0].keyData
использовалось для получения открытого ключа SSH для входа. Чтобы получить каждый открытый ключ SSH, выражение может быть записано как osProfile.linuxConfiguration.ssh.publicKeys[].keyData
.
Это выражение запроса сглаживает osProfile.linuxConfiguration.ssh.publicKeys
массив, а затем запускает keyData
выражение для каждого элемента:
az vm show --resource-group QueryDemo --name TestVM --query "{VMName:name, admin:osProfile.adminUsername, sshKeys:osProfile.linuxConfiguration.ssh.publicKeys[].keyData }"
{
"VMName": "TestVM",
"admin": "azureuser",
"sshKeys": [
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMobZNJTqgjWn/IB5xlilvE4Y+BMYpqkDnGRUcA0g9BYPgrGSQquCES37v2e3JmpfDPHFsaR+CPKlVr2GoVJMMHeRcMJhj50ZWq0hAnkJBhlZVWy8S7dwdGAqPyPmWM2iJDCVMVrLITAJCno47O4Ees7RCH6ku7kU86b1NOanvrNwqTHr14wtnLhgZ0gQ5GV1oLWvMEVg1YFMIgPRkTsSQKWCG5lLqQ45aU/4NMJoUxGyJTL9i8YxMavaB1Z2npfTQDQo9+womZ7SXzHaIWC858gWNl9e5UFyHDnTEDc14hKkf1CqnGJVcCJkmSfmrrHk/CkmF0ZT3whTHO1DhJTtV stramer@contoso\n"
]
}
Фильтрация массивов посредством логических выражений
Другая операция, используемая для получения данных из массива, — фильтрация. Фильтрация выполняется с помощью оператора JMESPath [?...]
.
Этот оператор принимает предикат в качестве его содержимого. Предикат — это любая инструкция (включая логические свойства), которую можно оценить либо true
либо false
. Выражения, в которых предикат вычисляется как true
, включаются в выходные данные.
Первый запрос демонстрирует, как получить список имен всех подписок Azure, подключенных к вашей учетной записи, свойство которых isDefault
имеет значение true. Второй и третий запросы показывают два разных способа перечисления всех подписок, свойство которых isDefault
имеет значение false.
# Boolean values are assumed to be true, so you can directly evaluate the isDefault property to return the default subscription.
az account list --query "[?isDefault].name"
# To check if a Boolean property is false, you can use the comparison operator == or the logical operator !.
az account list --query '[?!isDefault].name'
az account list --query "[?isDefault == \`false\`].name"
JMESPath предлагает стандартные операторы сравнения и логические операторы. К ним относятся <
, <=
, >
, >=
, ==
и !=
. JMESPath также поддерживает логические операции "и" (&&
), "или" (||
) и "не" (!
). Выражения можно сгруппировать в скобках, что позволяет создавать более сложные выражения предиката. Полные сведения о предикаатах и логических операциях см. в спецификации JMESPath.
В последнем разделе вы развернули массив, чтобы получить полный список всех виртуальных машин в группе ресурсов. При использовании фильтров эти выходные данные могут быть ограничены только виртуальными машинами Linux:
az vm list --resource-group QueryDemo --query "[?storageProfile.osDisk.osType=='Linux'].{Name:name, admin:osProfile.adminUsername}" --output table
Name Admin
------ ---------
Test-2 sttramer
TestVM azureuser
Можно также фильтровать числовые значения, такие как размер диска ОС. В следующем примере показано, как отфильтровать список виртуальных машин для отображения с размером диска, превышающим или равным 50 ГБ.
az vm list --resource-group QueryDemo --query "[?storageProfile.osDisk.diskSizeGb >=\`50\`].{Name:name, admin:osProfile.adminUsername, DiskSize:storageProfile.osDisk.diskSizeGb }" --output table
Name Admin DiskSize
------- -------- --------
WinTest winadmin 127
Для больших массивов можно быстрее применить фильтр перед выбором данных.
Это важно
В JMESPath строки всегда окружены одними кавычками ('
) или escape-символами (`
). Если в предикате фильтра используются двойные кавычки, вы получите пустые выходные данные.
Функции JMESPath
JMESPath также имеет встроенные функции, позволяющие выполнять более сложные запросы и изменять выходные данные запросов. В этом разделе основное внимание уделяется использованию функций JMESPath для создания запросов во время обработки выходных данных с помощью раздела функций , демонстрирующего использование функций для изменения выходных данных.
Выражения вычисляются перед вызовом функции, поэтому сами аргументы могут быть выражениями JMESPath. В следующих примерах показано это понятие с помощью contains(string, substring)
средства проверки того, содержит ли строка подстроку. Эта команда находит все виртуальные машины с хранилищем SSD для своего диска ОС:
az vm list --resource-group QueryDemo --query "[?contains(storageProfile.osDisk.managedDisk.storageAccountType,'SSD')].{Name:name, Storage:storageProfile.osDisk.managedDisk.storageAccountType}"
[
{
"Name": "TestVM",
"Storage": "StandardSSD_LRS"
},
{
"Name": "WinTest",
"Storage": "StandardSSD_LRS"
}
]
Выражения пайплайна
Аналогично тому, как |
используется в командной строке, |
можно использовать в запросах JMESPath для применения выражений к промежуточным результатам запроса. Мы также можем использовать |
для разбиения сложных запросов на более простые вложенные выражения. Чтобы сократить запрос из предыдущего раздела, используйте |
, чтобы применить фильтр после сглаживания и выбора данных.
az vm list --resource-group QueryDemo --query "[].{Name:name, Storage:storageProfile.osDisk.managedDisk.storageAccountType} | [? contains(Storage,'SSD')]"
[
{
"Name": "TestVM",
"Storage": "StandardSSD_LRS"
},
{
"Name": "WinTest",
"Storage": "StandardSSD_LRS"
}
]
См. спецификацию JMESPath — встроенные функции для полного списка функций.
Управление выходными данными с помощью функций
Функции JMESPath также имеют другую цель, которая заключается в работе с результатами запроса. Любая функция, возвращающая нелогическое значение, изменяет результат выражения. Например, можно сортировать данные по значению свойства.sort_by(array, &sort_expression)
JMESPath использует специальный оператор &
для выражений, которые должны быть оценены позже как часть функции. В следующем примере показано, как сортировать список виртуальных машин по размеру диска ОС:
az vm list --resource-group QueryDemo --query "sort_by([].{Name:name, Size:storageProfile.osDisk.diskSizeGb}, &Size)" --output table
Name Size
------- ------
Test-2 30
TestVM 32
WinTest 127
См. спецификацию JMESPath — встроенные функции для полного списка функций.
Форматирование результатов запроса
Azure CLI использует JSON в качестве формата выходных данных по умолчанию, однако различные форматы выходных данных лучше подходят для запроса в зависимости от его назначения и результатов. Сначала запросы выполняются на выходных данных JSON
, а затем форматируются.
В этом разделе будут рассмотрены форматирование tsv
и table
, а также некоторые варианты использования для каждого из форматов. Дополнительные сведения о выходных форматах см. в разделе "Выходные форматы" для команд Azure CLI.
Формат выходных данных TSV
Формат tsv
выходных данных возвращает значения, разделенные табуляцией и переводом строки, без дополнительного форматирования, ключей или других символов. Этот формат полезен, если выходные данные хранятся в параметре и используются в другой команде.
Одним из вариантов использования форматирования tsv
является запросы, которые извлекают значение из команды CLI, например идентификатор ресурса Azure или имя ресурса, и сохраняют значение в локальной переменной среды. По умолчанию результаты возвращаются в формате JSON, что может быть проблемой при работе со строками JSON, которые заключены в "
символы. Кавычки могут не интерпретироваться оболочкой, если выходные данные команды назначаются непосредственно переменной среды. Эта проблема рассматривается в следующем примере, который назначает результат запроса переменной среды:
USER=$(az vm show --resource-group QueryDemo --name TestVM --query "osProfile.adminUsername")
echo $USER
"azureuser"
Используйте форматирование tsv
, как показано в следующем запросе, чтобы избежать обёртывания возвращаемых значений информацией о типе.
USER=$(az vm show --resource-group QueryDemo --name TestVM --query "osProfile.adminUsername" --output tsv)
echo $USER
azureuser
Формат выходных данных таблицы
Формат table
выводит выходные данные в виде таблицы ASCII, что упрощает чтение и сканирование. Не все поля включены в таблицу, поэтому этот формат лучше всего использовать в качестве обзора данных, доступных для поиска человека. Поля, которые не включены в таблицу, по-прежнему можно фильтровать в рамках запроса.
Примечание.
Некоторые ключи отфильтровываются и не печатаются в представлении таблицы. Эти ключи: id
, type
и etag
. Чтобы просмотреть эти значения, можно изменить имя ключа в хэше с несколькими выборками.
az vm show --resource-group QueryDemo --name TestVM --query "{objectID:id}" --output table
Для демонстрации этой концепции можно использовать предыдущий запрос. Исходный запрос вернул объект JSON, содержащий имя, ОС и имя администратора для каждой виртуальной машины в группе ресурсов:
az vm list --resource-group QueryDemo --query "[].{Name:name, OS:storageProfile.osDisk.osType, admin:osProfile.adminUsername}"
[
{
"Name": "Test-2",
"OS": "Linux",
"admin": "sttramer"
},
{
"Name": "TestVM",
"OS": "Linux",
"admin": "azureuser"
},
{
"Name": "WinTest",
"OS": "Windows",
"admin": "winadmin"
}
]
В сочетании с --output table
форматом выходных данных имена столбцов соответствуют displayKey
значению хэша multiselect, что упрощает очистку информации:
az vm list --resource-group QueryDemo --query "[].{Name:name, OS:storageProfile.osDisk.osType, Admin:osProfile.adminUsername}" --output table
Name OS Admin
------- ------- ---------
Test-2 Linux sttramer
TestVM Linux azureuser
WinTest Windows winadmin
Дальнейшие действия
Дополнительные сведения о запросах JMESPath см. в руководстве по JMESPath.
Дополнительные сведения о других понятиях Azure CLI, упомянутых в этой статье, см. в следующих статьях: