在 Windows 关机时执行批处理脚本

Posted

技术标签:

【中文标题】在 Windows 关机时执行批处理脚本【英文标题】:Executing a batch script on Windows shutdown 【发布时间】:2012-09-08 05:30:09 【问题描述】:

有没有什么办法,在Windows 7 Professional 中,当用户单击“关闭”时运行批处理脚本(例如,.BAT 文件)(不是计划关闭机器的批处理文件,只是一个运行只有当用户点击“关机”时)?

理想情况下,这样的脚本会显示命令提示符窗口并提供取消关机程序的选项。

不需要第三方实用程序的解决方案会更好。

【问题讨论】:

您是否设法防止关机?如果是,你是怎么做到的?谢谢 如果要防止用户关闭计算机,可以通过组策略在开始菜单中禁用对它的访问。转到用户配置\策略\管理模板\开始菜单和任务栏并查找删除并阻止访问关机、重启、睡眠和休眠命令。这将从开始菜单中隐藏这些选项。如果您需要让他们重启,您可以在All Users\Desktop文件夹中添加一个批处理文件,调用shutdown.exe \r \t 10命令,这将在10秒后强制重启计算机。跨度> 好的,那你如何调试脚本呢?即使只是将输出转储到文件中也会有所帮助。 相关问题***.com/q/52581235/45375 询问如何编写脚本(自动)安装关闭脚本(无需向用户显示可见的控制台窗口)。 【参考方案1】:

这可以通过SCHTASKS 以编程方式实现:

SCHTASKS /Create /SC ONEVENT /mo "Event[System[(EventID=1074)]]" /EC Security /tn on_shutdown_normal /tr "c:\some.bat" 

SCHTASKS /Create /SC ONEVENT /mo "Event[System[(EventID=6006)]]" /EC Security /tn on_shutdown_6006 /tr "c:\some.bat" 

SCHTASKS /Create /SC ONEVENT /mo "Event[System[(EventID=6008)]]" /EC Security /tn on_shutdown_6008 /tr "c:\some.bat" 

【讨论】:

【参考方案2】:

嗯,这是一种进行一些注册表更改的简单方法: 我在 2008 r22016 服务器上试过这个。

需要做的事情:

    创建一个文本文件“regedit.txt” 在其中粘贴以下代码:
Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts\Shutdown] 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\Scripts\Shutdown]     

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts\Shutdown\0]  
"GPO-ID"="LocalGPO"    
"SOM-ID"="Local"    
"FileSysPath"="C:\\Windows\\System32\\GroupPolicy\\Machine"    
"DisplayName"="Local Group Policy"    
"GPOName"="Local Group Policy"    

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts\Shutdown\0\0]    
"Script"="terminate_script.bat"    
"Parameters"=""    
"ExecTime"=hex(b):00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00    

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\Scripts\Shutdown\0]
"GPO-ID"="LocalGPO"    
"SOM-ID"="Local"    
"FileSysPath"="C:\\Windows\\System32\\GroupPolicy\\Machine"    
"DisplayName"="Local Group Policy"    
"GPOName"="Local Group Policy"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\Scripts\Shutdown\0\0]    
"Script"="terminate_script.bat"    
"Parameters"=""
"IsPowershell"=dword:00000000
"ExecTime"=hex(b):00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00

    将此文件另存为 regedit.reg 扩展名

    使用以下命令在任何命令行上运行它:

    regedit.exe /s regedit.reg
    

【讨论】:

【参考方案3】:

为了让上面的代码起作用;您需要确保以下目录存在(我的没有)。只需将以下内容添加到 bat 并运行它:

mkdir C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup
mkdir C:\Windows\System32\GroupPolicy\Machine\Scripts\Shutdown
mkdir C:\Windows\System32\GroupPolicy\User\Scripts\Startup
mkdir C:\Windows\System32\GroupPolicy\User\Scripts\Shutdown

只是 GP 需要这些目录存在:

Group Policy\Local Computer Policy\Windows Settings\Scripts (Startup/Shutdown)

正常运行。

【讨论】:

【参考方案4】:

我在搜索启动和关闭 Windows 10 的运行脚本时发现了这个主题。上面的那些答案不起作用。对我来说,当我将脚本放入任务计划程序时,Windows 10 上的工作。如何做到这一点:按窗口键并编写任务计划程序,打开它,然后右侧是添加任务...按钮。在这里您可以添加脚本。 PS:我找到了启动和注销用户的操作,没有关闭。

【讨论】:

执行此操作时我找不到logout user 选项。是叫别的名字还是我怎么找到它?【参考方案5】:

创建您自己的关闭脚本 - 称为 Myshutdown.bat - 并在脚本中执行您要执行的任何操作,然后在其结束时调用 shutdown /a。然后执行你的 bat 文件,而不是正常关机。

(请参阅http://www.w7forums.com/threads/run-batch-file-on-shutdown.11860/ 了解更多信息。)

【讨论】:

【参考方案6】:

您可以在 Windows 上创建本地计算机策略。请参阅http://technet.microsoft.com/en-us/magazine/dd630947 的 TechNet

    运行 gpedit.msc 打开组策略编辑器, 导航到计算机配置| Windows 设置 |脚本(启动/关闭)

【讨论】:

有什么方法可以防止在附加到 tbis Shutdown 事件的脚本中关闭?我尝试了一个带有 shutdown /a 的批处理文件,但它似乎不起作用。 谢谢。请注意,您需要 Win ProfessionalUltimate 来执行此操作。如果你有标准家庭版(像我一样),那么你可以从here手动添加组策略编辑器。 在关闭之前为 VirtualBox VM 编写 savestate 脚本非常有帮助。谢谢! 我怎样才能在“睡眠”而不是“关机”时做到这一点? 请注意,如in this question 所述,如果您希望在注销时运行批处理脚本,我发现直接引用 .bat 文件不起作用。但是,如果我使用 C:\Windows\System32\cmd.exe 作为脚本名称并使用 /C C:\path\to\batch\script.bat 作为脚本参数,它确实

以上是关于在 Windows 关机时执行批处理脚本的主要内容,如果未能解决你的问题,请参考以下文章

windows怎么定时执行脚本

Windows批处理脚本陷入死循环问题

windows如何开机自动运行定时关机脚本

windows设置SpringBoot程序(bat脚本)开机自启

Windows 批处理脚本指南: 日志

windows 批处理脚本怎么执行