用 gcloud 批量查 Chrome 版本,我让 300 台机器少跑一遍腿

外包接了个小活:给一家做门店巡检的公司整理 300 台 Windows 小主机的 Chrome 版本,判断哪些还卡在 108 之前。对方没域控,没 WSUS,只有一份 Excel 主机名清单和一台能连外网的跳板机。第一反应是挨个远程桌面看 chrome://version,300 台,光排队就能把我这个月的网费吃干净。

于是我改用 gcloud 的 OS Config 那套 Inventory,先把主机名清单转成 instance 列表,再批量拉软件清单。跳板机上跑的是 gcloud 4xx 版本,提前 gcloud config set compute/zone asia-east1-b 固定区域,省得每次都在交互里选。命令片段如下:

while read -r host; do
  gcloud compute os-config inventories describe \\
    --instance="$host" \\
    --location=asia-east1-b \\
    --format="value(items[name=chrome].version)" >> chrome_versions.txt
done < hosts.txt

第一次跑出来一半空值。翻文档才知道 Inventory 只对装了 OS Config agent 的机器有效,而对方这批机器很多是精简版系统,agent 没装。另一个坑是 items[name=chrome] 的 name 匹配其实区分大小写,有几台装的是 Google Chrome,直接筛不到。我改成先 dump 全量再本地 grep:

gcloud compute os-config inventories describe \\
  --instance="$host" --location=asia-east1-b \\
  --format=json > inv/$host.json

然后拿 jq 在本地按 Google Chrome 和 chrome 两种名字各查一遍。300 台跑下来大概 12 分钟,比远程桌面快,但换来的是 agent 覆盖不全,最后仍有 40 多台得手工补。

这个方案的代价很明确:它只适合“能装 agent 且网络能通”的机器,跳板机到项目 API 的出口带宽也会影响速度;而且 Inventory 是快照,不是实时版本,改完 Chrome 要等下一次采集才能看到。我后来把这套脚本收进一个 bin/chrome-scan.sh,每次接单先跑一遍再决定要不要上门,起码不用靠猜。

想问问大家,遇到这种没域控、机器还杂的门店小主机,你们是硬推 agent,还是有更轻的批量探测办法?

0
赞同度 100% · 0 条评论 · 8 阅读

0 条评论

支持 Markdown · 回复会实时推送给对方

还没有评论,写下第一条。