物理机关机前需通知虚拟机安全关机或保存状态,VMware需通过WMI事件+脚本联动实现,Hyper-V可配置自动关机或批量保存,且必须禁用Windows快速启动以确保流程生效。

当物理机即将关机时,Windows系统需要提前通知正在运行的虚拟机,让它们完成保存状态或执行操作系统级关机,否则直接断电会导致虚拟机数据丢失、磁盘损坏或下次启动失败。
VMware Workstation:设置物理机关机时自动关闭客户机
VMware本身不提供“物理机关机→自动触发虚拟机动作”的原生钩子,但可通过Windows服务机制实现联动。
第一步:确保VMware Workstation安装了“VMware Authorization Service”和“VMware NAT Service”,这两个服务必须设为“自动(延迟启动)”。若被禁用,关机前服务无法响应。
第二步:打开VMware Workstation → 顶部菜单栏选择“编辑” → “首选项” → 切换到“热键”选项卡 → 勾选“启用热键” → 点击“确定”。这一步看似无关,实则激活了后台进程监听能力,否则关机信号无法被正确捕获。
第三步:以管理员身份运行PowerShell,执行以下命令注册关机脚本挂钩:
Register-WmiEvent -Class Win32_ComputerShutdownEvent -SourceIdentifier ShutdownInitiated -Action { C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe -T ws stop "C:\VMs\Win10.vmx" soft }
【注意:路径中的Win10.vmx需替换为你实际虚拟机的绝对路径;soft参数表示向客户机OS发送关机指令,不是强制断电】
第四步:将上述PowerShell命令保存为C:\Scripts\OnHostShutdown.ps1,并创建一个Windows任务计划,在“事件ID 1074(用户启动系统关机)”或“关机开始前10秒”触发该脚本。任务必须勾选“使用最高权限运行”和“即使用户未登录也要运行”。
Hyper-V:利用主机关机事件自动保存或关机虚拟机
Hyper-V原生支持关机集成服务,但默认不启用自动响应。必须手动配置每台虚拟机的关机行为。
方法一:对单台虚拟机设置平稳关机
在Hyper-V管理器中右键目标虚拟机 → 选择“设置” → 左侧展开“管理” → 点击“关机” → 右侧勾选“已启用” → 下拉选择“关机客户机操作系统” → 点击“确定”。
让 Windows 桌面程序在开机时静默自启并隐藏到系统托盘。特别适用于 Flutter、Electron 等无视 VBS/ProcessStartInfo 窗口样式、难以隐藏的顽固应用。提供「VBS 启动器 + Python ctypes/Win32 API」的隐藏窗口方案,可稳定把窗口收进托盘且不闪控制台。
方法二:批量设置所有已开机虚拟机为保存状态
以管理员身份运行PowerShell,逐条执行:
Get-VM | Where-Object {$_.State -eq 'Running'} | ForEach-Object { Save-VM -Name $_.Name }
将该命令封装为.ps1脚本,再通过任务计划绑定到“关机”触发器(触发器类型选“当特定事件被记录时”,日志:System,来源:User32,事件ID:1074)。
方法三:强制所有运行中虚拟机进入保存状态(无须客户机集成服务)
PowerShell命令:Get-VM | Where-Object {$_.State -eq 'Running'} | ForEach-Object { Save-VM -Name $_.Name -Force }
【Force参数跳过客户机确认,适用于未安装集成服务或客户机无响应的虚拟机】
通用补充:禁用快速启动以保障关机流程完整
Windows 10/11默认开启“快速启动”,它本质是混合关机(内核休眠),会跳过完整关机流程,导致上述脚本或服务根本得不到执行机会。
进入“控制面板 → 电源选项 → 选择电源按钮的功能” → 点击“更改当前不可用的设置” → 取消勾选“启用快速启动(推荐)” → 保存更改。
这一步必须完成,否则前面所有设置均无效。










