Как приостановить виртуальную машину в Hyper-V через WMI - PullRequest
0 голосов
/ 08 октября 2019

У меня есть несколько виртуальных машин 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?

...