如何列出已安装的 ISO 并从 VMware ESXi 中的命令行卸载它们?

如何列出已安装的 ISO 并从 VMware ESXi 中的命令行卸载它们?

我有一台 VMware ESXi 6 主机,上面运行着多个客户机。有一个数据存储,其中包含一个或多个客户端正在使用的 ISO 文件。我通过 Linux 上的 ssh 访问 ESXi 主机,因此 PowerCLI 不是一个选项。

问题 1:如何从 VMware CLI 找出哪些客户机安装了此 ISO 文件?

问题 2:一旦我知道了这一点,我怎样才能从这些客户机上卸载该 ISO 文件,也可以从 VMware CLI 中卸载?

我希望它是vim-cmd vmsvc子命令,但我无法找到它们。

答案1

通过 SSH 在 shell 上进行快速而粗略的解决方案是编写一个连接多个操作的小脚本:

  1. 获取虚拟机 ID vim-cmd vmsvc/getallvms|awk '{print $1}'|grep -o -E '[0-9]+'(列出所有虚拟机,使用 awk 仅显示第一列,使用 grep 过滤掉 IP、文本和空行)
  2. 遍历各行(ash没有类似的数组bash)并检查每个数字/ID,看看每个 VM 的设备列表中是否出现了您选择的 ISO 名称:(vim-cmd vmsvc/device.getdevices yourVmId|grep -o -A 12 -E 'yourImageName.iso' | grep -c 'connected = true'列出所有设备,获取 ISO 文件周围的区域,检查 ISO 当前是否已安装/处于活动状态)
  3. 使用来自相同初始列表的修改后的 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
  4. 用于vim-cmd vmsvc/device.connection yourVmId yourDeviceId disconnect断开设备。(编辑:这似乎并不完全正确,它确实做了一些事情,但不是我所期望的。当我有时间进一步调查时,我会更新)

我遇到的唯一问题是,执行最后一步时,VSphere 客户端中可能会出现消息“CD 驱动器被客户锁定”,但也许可以禁用该消息。

答案2

使用 PowerCLI...

或者直接手动为“多个”虚拟机执行此操作。
或者通过在安装后卸载来避免这种情况。

相关内容