如何在 Hyper-V 客户虚拟机上启用睡眠/休眠模式?
笔记:
- 我知道我可以从 Hyper-V 暂停/保存虚拟机。但是,我想模拟睡眠/休眠在物理机上的运作方式 - 特殊通知等。
- 我知道可以通过运行来启用休眠功能
powercfg -h on
,但是失败了The system firmware does not support hibernation.
- 我的 Hyper-V 在 Windows 10 1903 上运行,我的客户虚拟机也是如此。
背景:我正在开发 Windows 软件,该软件在机器进入睡眠/休眠状态时有特殊处理。该软件适用于物理机器(笔记本电脑等),但为了方便起见,我想在 Hyper-V VM 上测试它。
答案1
- 禁用虚拟机上的动态内存 - 它与休眠不兼容
- 在主机上运行以下 PowerShell 脚本:
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)
笔记:
- 在 Windows 10 1903 上进行了测试,包括主机和客户机
- 运行此程序后,您可以在虚拟机中执行以下操作:
powercfg -a
表明系统上已提供 Hibernatepowercfg -h on
作品- 电源设置 => 附加电源设置 => 选择电源按钮的功能 => 现在您可以选中“休眠 - 在电源菜单中显示”,您将在开始 => 电源菜单中进入休眠模式。
Shutdown /h
将会冬眠
- 休眠并重新启动计算机后,您将无法使用“增强会话”连接到它。完全重新启动虚拟机后,此问题可得到解决。