在 Windows 10 关机/注销/重启时执行批处理脚本

在 Windows 10 关机/注销/重启时执行批处理脚本

首先,抱歉。这是我在“stackoverflow”上提出的原始问题的重新发布,但我曾尝试让版主将其移走,因为该问题更像是一般的 Windows 行为问题,而不是实际的编码问题,但没有成功。

但对于生意来说。

当计算机(运行 Win10)收到关机、注销或重启命令时,我尝试运行 BAT 脚本。由于我有时会运行虚拟机(在 VirtualBox 中),我的脚本旨在搜索所有正在运行的 VM,暂停它们,然后检查没有 VM 接口仍处于活动状态(因为这可能导致暂停状态损坏,需要重新启动 VM)。该脚本已经过测试并按预期运行。

我的问题是让它自动运行。

我尝试将脚本添加到 GP 下的用户“配置 | Windows 设置 | 脚本(登录/注销)| 注销”下,如之前的帖子中所述。这似乎开始执行脚本,但在执行实际关机之前不允许它正确完成。

因此,我继续搜索,最后更改了另一个感兴趣的 GP 值。在“用户配置 | 管理模板 | 系统 | 脚本”下,我启用了“在注销脚本运行时显示其中的指令”。这会导致 Windows 显示命令提示符,并等待它关闭,然后再继续关机。

但是,我仍然面临问题。我目前的问题是,上述所有问题仍然发生在关机过程的后期。当按下开始菜单中的关机按钮时,首先会出现一个弹出窗口,通知我仍有正在运行的程序(虚拟机),并可以选择强制停止它们。只有在这之后(强制我的虚拟机以不太好的方式关闭),Windows 才会真正执行我的脚本(旨在以适当的方式保存虚拟机)。

因此,我的问题是,是否有一种方法,最好使用 GP 和/或任务调度程序,当触发关机/注销/重启时,但在出现“强制关闭”提示之前,我可以让 Windows 执行我的 BAT 脚本(并等待它完成)?

谨致问候 Henrik V. Nielsen

答案1

需要是发明之母。虽然不确定这是否适用于您的 VM 案例,但是:

我使用 gpedit.msc 并设置注销脚本的 Windows 10 答案是创建一个单独的 ping cmd 文件,并在关键文件之后运行“ping -n 5 127.0.0.1”。这使我的“关键”注销脚本能够正常工作。

相关内容