【发布时间】: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。我认为在运行包含|| 的命令行时,它会返回两个记录,但它只返回包含两个值的记录。
【问题讨论】: