如何在VMware ESXi中列出挂载的ISO并从命令行卸载它们?

我有一个VMware ESXi 6主机,上面运行着多个guest虚拟机。 有一个ISO文件的数据存储正在被一个或多个这些客户使用。 我通过ssh从Linux访问ESXi主机,所以PowerCLI不是一个选项。

问题1:如何从VMware CLI中找出哪些guest虚拟机已装载此ISO文件?

问题2:一旦我知道,我怎么能从这些guest虚拟机中卸载这个ISO文件,也是从VMware CLI中卸载的?

我期望它是vim-cmd vmsvc子命令,但我一直无法find它们。

通过SSH快速粗略的解决scheme是编写一个连接几个动作的小脚本:

  1. 使用vim-cmd vmsvc/getallvms|awk '{print $1}'|grep -o -E '[0-9]+' (列出所有虚拟机,只显示awk的第一列,过滤掉IP和文本并用grep空行)
  2. 遍历行( ash没有像bash这样的数组),并检查每个数字/ ID,如果在每个虚拟机的设备列表中find一个您select的ISO名称的事件: vim-cmd vmsvc/device.getdevices yourVmId|grep -o -A 12 -E 'yourImageName.iso' | grep -c 'connected = true' vim-cmd vmsvc/device.getdevices yourVmId|grep -o -A 12 -E 'yourImageName.iso' | grep -c 'connected = true' (列出所有设备,获取ISO文件周围的区域,检查ISO是否当前挂载/活动)
  3. 从相同的初始列表中获取每个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是必要的,因为缺less组选项-P
  4. 使用vim-cmd vmsvc/device.connection yourVmId yourDeviceId disconnect连接断开设备。 (编辑:这似乎不完全正确,它做了一些事情,但不是我所期望的,当我有时间进一步调查时,我会更新)

我遇到的唯一问题是在执行最后一步时,消息“guest虚拟机锁住的CD驱动器”可能出现在VSphere客户机中,但也许可以一般禁用。

使用PowerCLI …

或者只是手动执行“几个”虚拟机。
或者在安装之后通过卸载来避免这种情况。