【问题标题】:AZ CLI query filter on multiple properties using &&AZ CLI 使用 && 对多个属性进行查询过滤
【发布时间】:2020-04-15 20:17:06
【问题描述】:

我正在尝试创建一个 az 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

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

更新信息:

经过进一步测试,我取得了一些进展,但仍不完全符合我的预期。假设租户 ID 是 123,我想要的 sub 的订阅 ID 是 ABC,我的帐户也可以访问订阅 ID 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

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

【问题讨论】:

    标签: azure-cli jmespath


    【解决方案1】:

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

    其实一个订阅只能信任一个租户,所以你可以过滤订阅ID,它会得到唯一匹配的租户ID。在this blog 中阅读更多详细信息。

    目录是 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
    

    结果

    【讨论】:

    • 这是我最终采用的方法。 PowerShell 在这方面比 AZ CLI 更强大,但我是团队中唯一使用 PowerShell 的人,因此尝试切换到 AZ CLI,以便他们使用我的一些东西。
    • 如何使过滤器与start with一起工作?比如name=='abc-*'好像不行
    猜你喜欢
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多