У меня есть несколько виртуальных машин Hyper-VM на рабочем столе Windows 10 Pro. Я хотел бы иметь возможность сохранить, приостановить и перезапустить их через WMI. Ниже приведены примеры с Powershell, но это только для прототипирования: мой последний целевой язык - Python. Проблема, которую я описываю ниже, возникает как с поддержкой WMI в Powershell, так и в Python.
Благодаря поддержке WMI в Powershell, я могу вызвать 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, возвращает ReturnValue 32775, недопустимое состояние, например,
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 :
Так: как правильно приостановить виртуальную машину Hyper-V с помощью WMI?