我需要在关闭 Windows 10 家庭版时运行批处理脚本,无论是手动重启还是由于 Windows 自动更新而自动重启。这也需要在没有用户登录的情况下工作。到目前为止,我已经尝试过:
- 事件 ID 为 1047 的计划任务(已丢弃,不会等到我的脚本结束)。
- 手动将组策略关闭脚本添加到注册表和 C:\WINDOWS\SYSTEM32\GroupPolicy(已丢弃,不会运行,因为看起来该功能已被 Windows 版本的限制所禁用。)
- 第三方软件。奇怪的是,我找不到任何可以作为服务运行并允许我添加在系统(或服务)关闭时运行的 .bat 文件免费工具。
- 我尝试使用 AutoHotkey + NSSM [The Non-Sucking Service Manager] 作为自定义服务,但 AutoHotkey 的事件并非每次都会触发。
我对这个限制很不满。
答案1
我以前用 AutoHotkey 做过这个。这个脚本已经过测试,可以正常工作。
我制作了一个基本的批处理文件,它将在桌面上创建一个“测试文件”。只需运行 AHK 文件并保持其运行即可。当脚本检测到关机时,它将运行该批处理文件。
确保在脚本顶部设置文本文件的路径。
AutoHotkey 脚本:
;==============================
;Set the path to your batch file.
path := "C:\batch.bat"
;==============================
; Run script as admin. This will allow your batch file to be ran with admin priv.
if not A_IsAdmin
{
Run *RunAs "%A_ScriptFullPath%" ; Requires v1.0.92.01+
ExitApp
}
; Only allow one instance of the script to run.
#SingleInstance, Force
; If you don't want an icon to show in the tray,
; remove the semicolon from the line below.
;#NoTrayIcon
; When script detects WM_QUERYENDSESSION (a shutdown), run OnShutDown function.
OnMessage(0x11, "OnShutDown")
return
OnShutDown(){
; Run the batch file.
Run, % path
ExitApp
}
我用于测试的批处理文件:
echo Write file before shutdown > %USERPROFILE%\Desktop\ShutdownTest.txt
如果您愿意,您可以随时直接通过 AHK 执行批处理文件命令。
答案2
经过几个月我终于找到了解决方案!
- 打开组策略管理控制台。
- 然后转到
User Configuration\Policies\Windows Settings\Scripts (Logoff)
。 - 现在添加您的应用程序或脚本。
通常情况下,对于我来说,这一点是行不通的。
解决方法是转到
User Configuration\Policies\Administrative Templates\System\Scripts
。并启用
Display instructions in shutdown scripts as they run
。
运行GPUPDATE /FORCE
并享受吧!要关机,请按照相同的步骤操作,但要按照Computer Configuration
。
答案3
更新:如果这是在下一个用户登录之前需要完成的事情,那么将其放入机器启动脚本中可能会满足您的需求。如果这是在关机之前必须完成的事情,那么关机脚本就是您的答案。
如果家庭版不允许您修改本地策略以使这些脚本工作,那么这是家庭版的限制,您可能需要升级。但是,科技网没有将如何设置关机脚本的解释缩小到 Windows# 之外。
另外,机器关机脚本将以计算机的权限运行。用户注销脚本将以登录用户的权限运行。
使用批处理脚本关机?只需在关机脚本末尾使用关机命令(“shutdown -t 0”)。在桌面上放置脚本的快捷方式,使用电源按钮图标。(删除了基于单个用户通过脚本关机而不是开始菜单关机选项的答案)。