如何用gcloud/Cloud Shell列出组织中启用指定服务的GCP项目
列出组织内启用特定API的GCP项目(单行命令方案)
为什么gcloud projects list无法直接实现
gcloud projects list返回的项目元数据仅包含项目ID、名称、状态、创建时间等基础信息,不包含已启用的服务/API状态,因此无法通过该命令的--filter选项直接筛选出启用特定API的项目。
单行命令解决方案
筛选启用BigQuery API的项目
执行以下单行命令,即可输出组织内所有启用了BigQuery API的项目ID:
gcloud projects list --format="value(projectId)" | xargs -I {} sh -c 'gcloud services list --enabled --project {} --filter="config.name:bigquery.googleapis.com" --format="value(config.name)" > /dev/null && echo {}'
命令拆解
gcloud projects list --format="value(projectId)":仅输出当前账号有权限访问的所有项目IDxargs -I {}:将每个项目ID作为参数传递给后续子命令sh -c '...':检查目标项目是否启用了bigquery.googleapis.com服务,若启用则输出项目ID
适配任意API
只需将命令中的bigquery.googleapis.com替换为目标API的服务名称即可,例如筛选启用Compute Engine API的项目:
gcloud projects list --format="value(projectId)" | xargs -I {} sh -c 'gcloud services list --enabled --project {} --filter="config.name:compute.googleapis.com" --format="value(config.name)" > /dev/null && echo {}'
限制为特定组织的项目
如果只需要筛选特定组织下的项目,在gcloud projects list中添加组织过滤条件(替换ORG_ID为你的组织ID):
gcloud projects list --filter="parent.type=organization parent.id=ORG_ID" --format="value(projectId)" | xargs -I {} sh -c 'gcloud services list --enabled --project {} --filter="config.name:bigquery.googleapis.com" --format="value(config.name)" > /dev/null && echo {}'
优化执行速度(可选)
如果项目数量较多,可安装parallel工具实现并行检查(Cloud Shell中需先安装):
sudo apt install -y parallel gcloud projects list --format="value(projectId)" | parallel 'gcloud services list --enabled --project {} --filter="config.name:bigquery.googleapis.com" --format="value(config.name)" > /dev/null && echo {}'
内容的提问来源于stack exchange,提问作者Ian Hyzy
相关产品推荐
相关产品推荐

