我在用着http://pshyperv.codeplex.com/通过 PowerShell 管理 Hyper-V。操作系统:Windows Server 2012
这个 PS 模块可以获取正在运行的虚拟机,我猜应该也可以获取处于停止状态的虚拟机。命令:
获取虚拟机 - 运行
获取虚拟机停止
如果获取正在运行的机器没有问题并且返回了正确的列表,那么我有一个问题,或者可能是缺乏知识,如何获取已停止的机器,因为当我关闭机器时,Get-VM -Stopped 仍未返回它。机器状态为“关闭”。一旦我启动它,它就会出现在正在运行的列表中,就像什么都没发生一样。VM 并未完全删除,只是关闭了。
有任何想法吗?
答案1
我会尝试原生的 w2k12 hyper-v powershell 命令,它们比 codeplex 上的命令更完整。我认为 codeplex 上的命令适用于 w2k8r2。
答案2
首先要说明的是,我今天才第一次开始研究 PowerShell 和 CodePlex Hyper-V 模块。
话虽如此,我相信 CodePlex Hyper-V 模块在 Get-VM 中使用的 WQL 查询中存在一个“错误”,导致它无法返回处于停止状态的虚拟机(尽管 Get-VM 文档声称如此)。
问题似乎出在 where 子句的 ProcessID 部分。注释表明已停止的虚拟机的 ProcessID 应为 0,但似乎并非如此。已停止的虚拟机的 ID 似乎为 NULL。删除该子句应该可以解决问题,但我不知道此时还有什么(除了 Hyper-V 主机本身)可能停止被过滤掉。+
我假设这是 2K8 -> 2K12 的不兼容性,而不是假设它一直存在问题,但我无法确认,因为我没有 2K8 Hyper-V 安装来测试它。