出于各种原因,我们希望客户的计算机在使用空调时不会进入睡眠状态。我们一直在运行以下脚本,并取得了一定的成功:
powercfg /change standby-timeout-ac 0
但是,该脚本在很多计算机(包括不在域中的计算机)上运行失败,并显示以下错误消息:
此电源方案或电源设置存在组策略覆盖设置。
我意识到这个问题可以通过 GPO 轻松解决,但这不是可行的解决方案,因为我们的很多客户都是没有域名的小型企业。有没有办法powercfg
覆盖本地 GPO?
答案1
要么是“不”,后面跟着“但是”,要么是“是”,后面跟着“然而”。
我们首先采用“否”的方法 - 否,组策略会否决应用程序所做的配置,而不是相反,这是设计使然。如果你真的想要,通过将安全 ACL 创造性地应用于相关注册表项,您可以禁止SYSTEM
应用组策略,有效地允许您使用应用程序覆盖它们......但,这真是一个糟糕的想法。
换句话说,是的,因为组策略只是注册表项,您可以使用您选择的注册表编辑器随心所欲地修改它们,并让自己处于一个非常尴尬的状态,即通过阻止SYSTEM
访问相关组策略的注册表项,有效地覆盖组策略。但是,有一种更好的方法可以解决这个问题,即配置相关组策略。(是的,本地组策略与域组策略一样可编辑。)
在这种情况下,您可以使用本地组策略编辑器(MMC snapin)编辑设置,但看起来您正在寻找一个脚本选项,这也是可能的。 从脚本或命令行调用 reg.exe,并让其将适当的值写入正确的键。在本例中,您需要位于 的键HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power
,名为HibernateEnabled
,REG_DWORD
值类型为0
。
看起来应该像下面这样:
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Power /v HibernateEnabled /t REG_DWORD /d 0
这将禁用休眠模式,如果在冲突的组策略运行后执行此操作,则会覆盖组策略设置的任何值。当然,这可能不是理想的选择,因为您必须在每次计算机启动时运行该操作,并且您只想在使用交流电源时禁用休眠模式,因此您可能需要以编程方式编辑注册表中的组策略。找到相应注册表项的最简单方法是使用本地组策略编辑器更改该设置(在 ProcMon 运行时),然后使用它来显示刚刚修改的组策略设置。
(使用 GUI,它位于 下Computer Configuration\Administrative Templates\System\Power Management\Sleep Settings
。)
使用 ProcMon 找到所需的密钥并知道将其设置为什么值后,您可以将其插入reg.exe
,如我上面给出的示例,以按照您的指定配置本地组策略。作为命令行命令,您将获得可以手动使用或粘贴到脚本中的东西,具体取决于情况。