Фильтр запросов интерфейса командной строки AZ для нескольких свойств с использованием &&

Я пытаюсь создать запрос z cli, который может оценить, вошел ли я в правильный клиент и подписку. Я знаю, что должен использовать операторы ? и &&, но пока не смог найти их в правильной комбинации, которая будет работать. Когда я запрашиваю только одно значение, используя строку ниже, работает нормально:

az account list --query "[?id=='my_subscription_id']" --output json

Но когда я пробую любую из приведенных ниже строк, он сообщает мне, что недопустимое значение jmespath_type:

az account list --query "[?id=='my_subscription_id' && ?tenantId=='my_tenant_id']"  --output json
az account list --query "[(?id=='my_subscription_id') && (?tenantId=='my_tenant_id')]"  --output json

когда я пробую строку ниже, появляется ошибка ] was unexpected at this time:

az account list --query "[(?id=='my_subscription_id')&&(?tenantId=='my_tenant_id')]"  --output json

Я знаю, что это можно сделать, но пока не могу найти подходящую смесь.

ОБНОВЛЕННАЯ ИНФОРМАЦИЯ:

При дальнейшем тестировании я добился некоторого прогресса, но все еще не совсем того, чего ожидал. Предположим, что идентификатор клиента - 123, идентификатор подписки требуемой подписки - ABC, а моя учетная запись также имеет доступ к идентификатору подписки EFG. При выполнении следующей команды:

az account list --query "[].{subscriptionId:id,tenantId:tenantId}"

Получаю вывод:

  {
    "subscriptionId": "ABC",
    "tenantId": "123"
  },
  {
    "subscriptionId": "EFG",
    "tenantId": "123"
  }

Я ожидал, что выполнение приведенной ниже команды вернет только одну соответствующую запись:

az account list --query "[?id == 'ABC' && tenantid == '123'].{subscriptionId:id,tenantId:tenantId}" --output json

Но это не так. Возвращает [].

Выполнение приведенной ниже команды возвращает единственную запись, которая соответствует обоим условиям:

az account list --query "[?id == 'ABC' || tenantid == '123'].{subscriptionId:id,tenantId:tenantId}" --output json

Согласно документации, && - это И, а || - ИЛИ. Я бы подумал, что при запуске командной строки, в которой есть ||, будут возвращены ОБЕИ записи, но она вернет только ту, которая содержит оба значения.


person phydeauxman    schedule 15.04.2020    source источник


Ответы (1)


Я пытаюсь создать запрос z cli, который может оценить, вошел ли я в правильный клиент и подписку.

Фактически, одна подписка может доверять только одному клиенту, поэтому вы можете просто отфильтровать идентификатор подписки, и он получит только один соответствующий идентификатор клиента. Дополнительные сведения см. В этом блоге .

Каталог - это служба Azure AD, и каждый каталог может иметь один или несколько доменов. Подписка Azure имеет доверительные отношения с Azure Active Directory, что означает, что подписка доверяет Azure AD для проверки подлинности пользователей, служб и устройств.

С каталогом может быть связано несколько подписок, но только один клиент. Несколько подписок могут доверять одному и тому же каталогу Azure AD, но каждая подписка может доверять только одному каталогу.

В этом случае вам известен идентификатор подписки. Вы также получили вывод идентификатора подписки и записей сопоставления идентификатора клиента. Вы можете получить точные результаты, отфильтровав свой идентификатор подписки следующим образом. Или используйте его так, как вы это знали: az account list --query "[?id=='my_subscription_id']" --output json

Затем вы можете проверить, правильно ли вы вошли в систему.

az account list --query "[].{SubID:id,TenantID:tenantId}[?SubID=='my_subscription_id']" -o table

результат введите описание изображения здесь

person Nancy Xiong    schedule 16.04.2020
comment
В итоге я выбрал именно такой подход. PowerShell более надежен, чем AZ CLI в этой области, но я единственный в моей команде, который использует PowerShell, поэтому пытаюсь переключиться на AZ CLI, чтобы они могли использовать некоторые из моих вещей. - person phydeauxman; 17.04.2020