通过 ACPI 或脚本强制关闭 Windows VM

通过 ACPI 或脚本强制关闭 Windows VM

在工作中,我们有一个 Windows Server 2003 VM,我们希望在主机操作系统 (Linux) 关闭时关闭它。除了用户登录并锁定屏幕的情况外,我们都能正常工作。似乎当屏幕锁定时,Windows 不会关闭。

我们正在研究如何防止用户不活动时自动锁定,但这并不是理想的做法。我们是否可以配置或编写某种脚本,以便无论用户做什么,Windows 都会关闭?

如果我们没有彻底关闭 Windows,整个虚拟机就有被破坏的风险。在我们的环境中,一旦主机操作系统收到 ACPI 信号,我们就有 120 秒的时间关闭所有设备,之后系统将被强制关闭。

我们在 Google 上搜索了好几次,但目前还没有找到答案。我们仍在寻找确凿的证据注册表设置。

答案1

使用 MSRPC 中的远程关机功能,并使用“强制”标志覆盖锁定的会话或挂起的进程。如果安装了 Samba,它可以用作:

net rpc -S vm-hostname shutdown -t 0 -f

(等效的 Windows 命令是shutdown -m \\vm-hostname -s -t 0 -f。)

或者,通过 ssh 进入 Windows VM 并shutdown -s -t 0 -f以此方式运行。Windows 有几种免费的 SSH 服务器,例如 Bitvise WinSSHd。

这三种方法(即使你shutdown通过 SSH 或本地运行)都需要一个账户远程关机权限,默认为管理员。

答案2

Windows 有一个 紧急医疗服务此功能可让您通过串行端口进行访问。虽然您实际上可以cmd.exe通过串行端口获得工作实例,但您也可以登录到一个简单的控制台,该控制台也允许您发出关机命令。即使系统崩溃或虚拟网络已关闭或严重损坏(您甚至可以获得最后一个 BSOD 文本 IIRC),此控制台也应该可以工作。

当时我在 qemu 下运行 Windows Server 2003,它允许将虚拟 COM1 重定向到本地“telnet”类端口。因此,我能够expect向 VM 发出干净的关机序列(如果需要,我也可以使用 telnet 直接与其通信)。

相关内容