如何使用govc获取指定文件夹内虚拟机及其关联存储集群的逗号分隔格式输出
如何使用govc获取指定文件夹内虚拟机及其关联存储集群的逗号分隔格式输出
我来帮你搞定这个需求!要获取指定文件夹下虚拟机和对应的存储集群(或数据存储)的逗号分隔输出,可以用govc结合文本/JSON解析工具来实现,具体步骤和命令如下:
先确认vCenter连接正常
首先确保你已经正确配置了govc的环境变量(比如GOVC_URL、GOVC_USERNAME、GOVC_PASSWORD),并且通过以下命令验证连接没问题:
govc about || { echo "Failed to connect to vCenter."; exit 1; }
如果连接正常,你会看到类似这样的输出:
Name: VMware vCenter Server Vendor: VMware, Inc. Version: 7.0.3 Build: 22357613 OS type: linux-x64 API type: VirtualCenter API version: 7.0.3.0
核心命令实现
方法一:用jq解析JSON输出(推荐,更稳定)
如果你的系统安装了jq(Linux/macOS可通过apt、brew等包管理器安装),这是最可靠的方式:
govc vm.info -folder "/你的数据中心名称/vm/目标文件夹名称" -json | jq -r '.[] | .Name + ", " + .Storage.Parent.Name'
命令说明:
-folder "/你的数据中心名称/vm/目标文件夹名称":替换成你实际的文件夹路径,比如/DC0/vm/ProductionVMs;如果不确定路径,可以用govc folder.ls /你的数据中心名称/vm查看所有虚拟机文件夹-json:让govc输出结构化的JSON,避免文本格式变动导致解析出错jq -r ...:提取每个虚拟机的名称和存储集群/数据存储名称,-r参数表示输出原始字符串(不带JSON引号)
方法二:无jq时用awk处理文本输出
如果没装jq,可以用awk来处理govc的默认文本输出:
govc vm.info -folder "/你的数据中心名称/vm/目标文件夹名称" | awk '/Name:/{vm=$2} /Storage Cluster|Datastore:/{if($2=="Cluster"){sc=$3}else{sc=$2}} /^$/&&vm&&sc{print vm", "sc; vm=""; sc=""}'
这个命令会逐行扫描输出,捕获虚拟机名称和对应的存储资源名称,在每个虚拟机信息块结束时输出结果。
预期输出
执行命令后,你会得到完全符合需求的逗号分隔格式:
vm1, storagecluster1 vm2, storagecluster4 vm3, storagecluster1 vm4, storagecluster2
注意事项
- 若虚拟机直接挂载在数据存储而非存储集群,命令会自动输出数据存储名称,无需额外调整
- 确保
govc版本与你的vCenter 7.0.3兼容,避免出现API调用问题
备注:内容来源于stack exchange,提问作者unknown
相关产品推荐
相关产品推荐

