我需要对我的 gcloud 命令进行哪些修改才能以下面的表格格式获取所有 GCP 项目中已启用服务的列表?

What modifications do I need to make to my gcloud command to get the list of enabled services in all GCP projects in the below tabular format?

我有以下代码块来枚举所有 GCP 项目中启用的服务:

for project in  $(gcloud projects list --format="value(projectId)"); \
do gcloud services list --project $project --format="table[box]($project,config.name,config.title)"; \
done;

它以这种格式给我输出:

但我希望输出采用这种格式:

我该如何做到这一点?请指教。谢谢

您不能使用 gcloud,因为您需要 assemble 来自多个命令的值:Projects.List 和 Services.List。 gcloud --format 仅适用于单个命令的输出。

您正在获取所需的所有数据(项目、名称和职务)。推荐大家使用bash和gcloud输出的字符组成table,自己合成table输出

更新

这是一个脚本,可以为您提供与您的行相匹配的 CSV 输出:

PROJECTS=$(\
  gcloud projects list \
  --format="value(projectId)")
for PROJECT in ${PROJECTS}
do
  CONFIGS=$(gcloud services list \
  --project=${PROJECT} \
  --format="csv[no-heading](config.name,config.title.encode(base64))")
  for CONFIG in ${CONFIGS}
  do
    IFS=, read NAME TITLE <<< ${CONFIG}
    TITLE=$(echo ${TITLE} | base64 --decode)
    echo "${PROJECT},${NAME},\"${TITLE}\""
  done
done

NOTE encode(base64) to avoid the unquote title values from being split. base64 --decode reverses this at output. It should be possible to use format but I don't understand the syntax. --format='csv[no-heading](config.name,format("\"{0}\"",config.title))' didn't work.

然后,按照最好的 *nix 传统,您可以将该输出通过管道传输到 awk 或列或其他将 CSV 格式化为漂亮打印的脚本 table。这是更困难的挑战,因为您需要确定每个字段中的最长值以便正确布局。我会把它留给你。