我的Windows 10 Pro桌面上有一些Hyper-VM VM。我希望能够通过WMI保存,暂停和重新启动它们。我在下面的示例中使用了Powershell,但这仅用于原型制作:我的最终目标语言是Python。我下面描述的问题在Powershell和Python的WMI支持中都会发生。
通过Powershell的WMI支持,我可以调用Msvm_ComputerSystem.RequestStateChange。
https://docs.microsoft.com/en-us/windows/win32/hyperv_v2/requeststatechange-msvm-computersystem似乎将“暂停”状态列出为32776。
https://docs.microsoft.com/en-us/previous-versions/windows/desktop/virtual/requeststatechange-msvm-computersystem似乎将“暂停”状态列出为32768。
将状态设置为诸如Enabled(2)之类的简单方法即可:
PS C:\Windows\system32> $vms = get-wmiobject -namespace root\virtualization\v2 Msvm_ComputerSystem
PS C:\Windows\system32> $vms[1].RequestStateChange(3)
__GENUS : 2
__CLASS : __PARAMETERS
__SUPERCLASS :
__DYNASTY : __PARAMETERS
__RELPATH :
__PROPERTY_COUNT : 2
__DERIVATION : {}
__SERVER :
__NAMESPACE :
__PATH :
Job : \\DESKTOP-6D2EIET\root\virtualization\v2:Msvm_ConcreteJob.InstanceID="28751864-53E3-498F-B9F0-F7C06D
B1FA21"
ReturnValue : 4096
PSComputerName :
(4096表示过渡已开始)
但是将状态设置为记录的暂停状态之一32768或32776会返回32775的ReturnValue,例如无效状态。
PS C:\Windows\system32> $vms[1].RequestStateChange(32776)
__GENUS : 2
__CLASS : __PARAMETERS
__SUPERCLASS :
__DYNASTY : __PARAMETERS
__RELPATH :
__PROPERTY_COUNT : 2
__DERIVATION : {}
__SERVER :
__NAMESPACE :
__PATH :
Job :
ReturnValue : 32775
PSComputerName :
因此:使用WMI暂停Hyper-V VM的正确方法是什么?