我有一台 VMware ESXi 6 主机,上面运行着多个客户机。有一个数据存储,其中包含一个或多个客户端正在使用的 ISO 文件。我通过 Linux 上的 ssh 访问 ESXi 主机,因此 PowerCLI 不是一个选项。
问题 1:如何从 VMware CLI 找出哪些客户机安装了此 ISO 文件?
问题 2:一旦我知道了这一点,我怎样才能从这些客户机上卸载该 ISO 文件,也可以从 VMware CLI 中卸载?
我希望它是vim-cmd vmsvc
子命令,但我无法找到它们。
答案1
通过 SSH 在 shell 上进行快速而粗略的解决方案是编写一个连接多个操作的小脚本:
- 获取虚拟机 ID
vim-cmd vmsvc/getallvms|awk '{print $1}'|grep -o -E '[0-9]+'
(列出所有虚拟机,使用 awk 仅显示第一列,使用 grep 过滤掉 IP、文本和空行) - 遍历各行(
ash
没有类似的数组bash
)并检查每个数字/ID,看看每个 VM 的设备列表中是否出现了您选择的 ISO 名称:(vim-cmd vmsvc/device.getdevices yourVmId|grep -o -A 12 -E 'yourImageName.iso' | grep -c 'connected = true'
列出所有设备,获取 ISO 文件周围的区域,检查 ISO 当前是否已安装/处于活动状态) - 使用来自相同初始列表的修改后的 grep 获取每个 CD 驱动器的设备 ID(假设只有一个,在一台机器上更改多个驱动器的代码):(
vim-cmd vmsvc/device.getdevices yourVmId|grep -o -B 4 -E 'yourImageName.iso'|grep -o -E 'key = [0-9]+'|grep -o -E '[0-9]+'
由于缺少组选项,因此需要双重 grep-P
) - 用于
vim-cmd vmsvc/device.connection yourVmId yourDeviceId disconnect
断开设备。(编辑:这似乎并不完全正确,它确实做了一些事情,但不是我所期望的。当我有时间进一步调查时,我会更新)
我遇到的唯一问题是,执行最后一步时,VSphere 客户端中可能会出现消息“CD 驱动器被客户锁定”,但也许可以禁用该消息。
答案2
或者直接手动为“多个”虚拟机执行此操作。
或者通过在安装后卸载来避免这种情况。