使用 && 对多个属性进行 AZ CLI 查询过滤器

phy*_*man 10 azure-cli jmespath

我正在尝试创建一个 az cli 查询,它可以评估我是否登录到正确的租户和订阅。我知道我必须使用?&&运算符,但还无法将它们组合成正确的组合。当我使用下面的行查询单个值时,工作正常:

az account list --query "[?id=='my_subscription_id']" --output json
Run Code Online (Sandbox Code Playgroud)

但是当我尝试下面的任何一行时,它告诉我它是无效的 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
Run Code Online (Sandbox Code Playgroud)

当我尝试下面的行时,它给了我错误] was unexpected at this time

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

我知道这是可以做到的,只是似乎还找不到合适的混合物。

更新信息:

经过进一步的测试,我取得了一些进展,但仍然不完全符合我的预期。假设租户ID是123,我想要的订阅ID是ABC,我的帐户也可以访问订阅ID EFG。运行以下命令时:

az account list --query "[].{subscriptionId:id,tenantId:tenantId}"
Run Code Online (Sandbox Code Playgroud)

我得到输出:

  {
    "subscriptionId": "ABC",
    "tenantId": "123"
  },
  {
    "subscriptionId": "EFG",
    "tenantId": "123"
  }
Run Code Online (Sandbox Code Playgroud)

我希望运行下面的命令,只会返回匹配的单个记录:

az account list --query "[?id == 'ABC' && tenantid == '123'].{subscriptionId:id,tenantId:tenantId}" --output json
Run Code Online (Sandbox Code Playgroud)

但是,事实并非如此。它返回[]

运行以下命令将返回符合这两个条件的单个记录:

az account list --query "[?id == 'ABC' || tenantid == '123'].{subscriptionId:id,tenantId:tenantId}" --output json
Run Code Online (Sandbox Code Playgroud)

根据文档,&&是 AND,||是 OR。我认为运行包含其中的命令行时||会返回两条记录,但它只返回包含这两个值的记录。

Nan*_*ong 4

我正在尝试创建一个 az cli 查询,它可以评估我是否登录到正确的租户和订阅。

事实上,一个订阅只能信任一个租户,所以你只要过滤订阅Id,就会得到唯一一个匹配的租户ID。在此博客中阅读更多详细信息。

目录是 Azure AD 服务,每个目录可能有一个或多个域。Azure 订阅与 Azure Active Directory 具有信任关系,这意味着订阅信任 Azure AD 来对用户、服务和设备进行身份验证。

一个目录可以有多个与其关联的订阅,但只能有一个租户。多个订阅可以信任同一个 Azure AD 目录,但每个订阅只能信任一个目录。

在这种情况下,您已经知道订阅 ID。您还获得了订阅 ID 和租户 ID 映射记录的输出。您可以通过像这样过滤您的订阅 ID 来获得准确的结果。或者按照您所知道的方式使用它:az account list --query "[?id=='my_subscription_id']" --output json

然后您可以验证您是否登录了正确的租户。

az account list --query "[].{SubID:id,TenantID:tenantId}[?SubID=='my_subscription_id']" -o table
Run Code Online (Sandbox Code Playgroud)

结果 在此输入图像描述