在 Windows 家庭版关机或重启之前运行脚本

在 Windows 家庭版关机或重启之前运行脚本

我需要在计算机关机或重启时运行脚本来删除一些文件。我知道有一个用于自动运行的注册表项。但我找不到用于关机/重启的项。

[更新] 我想在 Windows 7 家庭版上执行此操作,所以我没有组策略编辑器。

答案1

最简单的方法是使用本地组策略。

为此,请转到本地组策略编辑器(单击“开始”,键入管理控制台(在开始搜索框中,然后按 ENTER。)

加载完成后,转到以下路径:计算机配置> Windows 设置> 脚本(启动/关机)> 关机(见下文)

在此处输入图片描述

在这里,您可以选择在启动/关闭时在您的机器上运行的脚本。您还可以按照用户配置 > Windows 设置 > 脚本(登录/注销)来设置在登录和注销时运行的脚本。

不同之处在于:

启动在用户登录前运行。启动脚本以本地系统帐户身份执行

登录用户输入密码后立即运行。此操作以登录用户的身份执行。

注销在用户会话注销时运行(无论是关闭还是注销以更改用户),并在用户注销时执行

关闭注销后运行,并且仅作为机器关闭的一部分。它以本地系统帐户身份运行。

答案2

这是注册表的路径

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

或者

单击“开始”启动组策略编辑器,然后键入 gpedit.msc 并按 Enter。现在导航到

用户配置 > Windows 设置 > 脚本(登录/注销)

选项。

在那里添加您的脚本。

检查一下家庭版:

将本地组策略编辑器作为 MMC 管理单元打开

Open MMC. (Click Start , click in the Start Search box, type mmc , and then press ENTER .)
On the File menu, click Add/Remove Snap-in .
In the Add or Remove Snap-ins dialog box, click Group Policy Object Editor , and then click Add .
In the Select Group Policy Object dialog box, click Browse .
Click This computer to edit the Local Group Policy object, or click Users to edit Administrator, Non-Administrator, or per-user Local Group Policy objects.
Click Finish .

答案3

经过几个月我终于找到了解决方案!

  • 打开组策略管理控制台
  • 然后转到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

组策略

答案4

首先,感谢您指出使用 GPEDIT.MSC(在 Windows Home 上手动安装)可以添加启动、关闭、登录和注销脚本。

但是,如何以提升的管理员权限运行该脚本(登录和注销)?

我也尝试过任务计划程序,登录可以工作,但注销不起作用...我感到绝望/沮丧。

我需要的是在 Windows 启动时运行此命令:

C:\Windows\System32\reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v "ClearPageFileAtShutdown" /t REG_DWORD /d 1 /f

我还需要在 Windows 重启/关机时运行另一个命令:

C:\Windows\System32\reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v "ClearPageFileAtShutdown" /t REG_DWORD /d 0 /f

但是在生效的某个时刻;请注意,如果我手动运行命令(在任务计划程序中)将该值设置为 0,如果我在单击关机/重启之前一秒钟运行它,它就会起作用,不会清除任何页面文件(请记住 1GiB SSD 是 Veracrypt 完整系统加密的)。

让我解释一下为什么我如此感兴趣:

  • 一个需要的应用程序在用户登录时运行(在管理规则中),如果发现注册表项不是 1(它每 10 或 20 秒定期检查一次),则锁定计算机并且不允许您使用它,它以无法终止的模式运行(ProcessExplorer 甚至不会在管理规则中终止它)。
  • 该应用程序还确保虚拟 RAM 配置为固定的,并安装了两倍的 RAM,如果不是,它会自动更改它并重新启动 Windows。
  • 我不希望(也不需要)每次关机/重启时 512GiB 虚拟 RAM 都被零填充,想象一下在 VeraCrypt 加密系统分区上装有 Windows 的 1GiB SSD,这会很快杀死我的 1GiB SSD,因为 SSD 不接收零(接收加密的零,因此它们不再是零),每次重启/关机时都会写入一半的 SSD。

简而言之:

  • 我需要在 Windows 启动时启用 ClearPageFileAtShutdown,但在关机/重启开始时立即禁用它;以避免 SSD 寿命缩短得非常快。

注意:计算机有 256GiB 的物理 RAM,由于这个应用程序,我无法放置 512GiB,这太奇怪了,需要最大 1GiB 的系统驱动器或拒绝让您使用 Windows(当然您注意到了,我讨厌这个应用程序,但我被迫使用它,他们每周左右都不会为我支付 SSD 费用),它还每 45 分钟强制重启一次,因此算起来,每 45 分钟 0.5GiB = 每天 16 TiB(每月 480 TiB)只是因为清除页面文件...我讨厌它...更不用说关机/重启的时间增加了很多(如果每次重启/关机都在应用程序允许的最大时间内完成,即 45',每小时共有 16' 用于清除页面文件,在 24 小时内,如果每次使用 45',则每天清除页面文件的时间超过 6 小时;速度为 550MiB/s),现在我想您可以理解我的兴趣是避免这种清除(主要是 SSD 实时,但也是时间)。

EDIT1:我已经看到任务计划程序命令已运行(在关机/重启时)并且注册表项设置为 0,但是在关机/重启时它不起作用,更改太晚了;所以找到一个更早触发的事件肯定是一个问题,因为(User32 1074 和/或 WinLogon 7002)触发得不够快,用户注销也没有,计算机锁定也没有;它们都触发得太晚了。

EDIT2:它不能很快地与个人过滤器一起工作,例如SCHTASKS /Create /SC ONEVENT /mo "Event[System[(EventID=1074)]]" /EC Security /tn on_shutdown_normal /tr "c:\some.bat"

相关内容