3 votes

Comment activer la mise en veille/veille prolongée sur une VM invitée Hyper-V ?

Comment activer la mise en veille/veille prolongée sur une VM invitée Hyper-V ?

Notes :

  • Je sais que je peux mettre en pause/enregistrer la VM depuis Hyper-V. Cependant, je veux simuler le fonctionnement de la mise en veille/hibernation sur une machine physique - notifications spéciales, etc.
  • Je sais qu'il faut activer l'hibernation en exécutant powercfg -h on mais cela échoue avec The system firmware does not support hibernation.
  • Mon Hyper-V fonctionne sous Windows 10 1903, tout comme mes VM invitées.

Le contexte : Je suis en train de développer un logiciel Windows qui a une gestion spéciale lorsqu'une machine se met en veille/hibernation. Le logiciel est destiné à des machines physiques (ordinateurs portables, etc.), mais pour des raisons de commodité, je veux le tester sur un ordinateur.

2voto

Faisal Abid Points 2244
  1. Désactivez la mémoire dynamique sur la VM - elle est incompatible avec l'hibernation.
  2. Exécutez le script PowerShell suivant sur l'hôte :

    Param ( [string]$VmName, [bool]$Enable = $true )

    To modify, machine must be off

    $Vm = Get-VM -Name $VmName $Vm | Stop-VM -Force -WarningAction Ignore

    $wmiComputerSystem = gwmi -namespace root\virtualization\v2 -query "select * from Msvm_ComputerSystem where ElementName= '$VmName'" $wmi_vsSettingData = $wmiComputerSystem.GetRelated("Msvm_VirtualSystemSettingData","Msvm_SettingsDefineState",$null,$null, "SettingData", "ManagedElement", $false, $null)

    Write-Output ("Before: EnableHibernation = " + $wmi_vsSettingData.EnableHibernation)

    $wmi_vsSettingData.EnableHibernation = $Enable # Doesn't work - says The property 'EnableHibernation' cannot be found on this object

    So, need to munge XML ourselves

    [xml]$vsSettingsDataXml = $wmi_vsSettingData.gettext(1) $EnableHibernationNodes = $vsSettingsDataXml.SelectNodes("/INSTANCE/PROPERTY[@NAME='EnableHibernation']") $EnableHibernationNodes[0].VALUE=$Enable.ToString()

    $wmi_vsSettingDataMgmt = Get-WmiObject -Namespace "root\virtualization\v2" -Class Msvm_VirtualSystemManagementService $job = $wmi_vsSettingDataMgmt.ModifySystemSettings($vsSettingsDataXml.OuterXml)

Notes :

  • Testé sur Windows 10 1903, à la fois hôte et invité.
  • Une fois que vous l'avez exécuté, vous pouvez faire ce qui suit dans la VM :
    • powercfg -a montre que Hibernate est disponible sur le système
    • powercfg -h on travaux
    • Paramètres d'alimentation => Paramètres d'alimentation supplémentaires => Choisissez ce que fait le bouton d'alimentation => Vous pouvez maintenant cocher "Hibernation - Afficher dans le menu Alimentation", et vous obtiendrez l'hibernation dans le menu Démarrer=>Alimentation.
    • Shutdown /h va hiberner
  • Après avoir mis la machine en hibernation et l'avoir redémarrée, vous ne pourrez pas vous y connecter à l'aide de la "session améliorée". Ce problème est résolu après un redémarrage complet de la VM.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X