组策略控制Win7电源选项

附:更多系列访问郭正远博文列表

  1. 背景

某单位项目实施中用户反映Win7无屏保,但为宣传企业形象在项目初期就设置了统一屏保策略(通过AD下发域策略,通过脚本将屏保文件下发到本地C盘,然后指定屏保为本地文件,10分钟后启用屏保)接到问题反映后经过排查,策略配置无误、终端接收正常、XP终端屏保正常、Win7终端屏保不生效;

  1. 排查

Win7终端执行rsop.msc查看策略接收正常,终端无操作情况下等待10分钟发现并未出现屏保而显示黑屏,初步判断黑屏为屏幕关闭,或读取本地屏保文件失败,经过测试普通域用户访问本地屏保文件正常,查看终端电源选项接通电源关闭显示器为10分钟,也即终端刚要启动屏保时显示器被关闭,从而导致屏保失败也即并非屏保本身问题,首先想到的第一解决方案为更改屏保时间为8分钟,与用户讨论后用户要求屏保时间必须大于等于10分钟;

  1. 解决

通过讨论需要对本单位所有终端的电源选项关闭显示器时间项调整为15分钟,第一思路为通过域策略进行配置,经过查询发现域策略中未提供该选项,Windows系统级配置实际都在配置注册表文件,可理解为注册表为Windows系统的配置数据库文件,所以遇到无法通过域策略中的模板实现配置情况下,则通过域策略中的启动脚本策略进行更改客户端注册表;

Step1:确认关闭显示器对应的注册表项

每次更改操作系统中某项目配置时系统都会对注册表进行更改,所以获取关闭显示器对应的注册表项方法为首先将Win7终端注册表完全导出(在运行中输入regedit,在顶部计算机处右键选择导出),然后更改闭显示器的时间配置(控制面板>电源选项>更改计划设置),更改完成后再次导出注册表,将俩次导出的结果通过文本对比工具进行对比差异项,经过筛选发现ACSettingIndex项为更改关闭显示器时间的配置项(10分钟十六进制值为00000258,15分钟十六进制值为00000384);

在注册表中查询上述俩项ACSettingIndex位置,找到后在其父目录右键选择导出;

将2个位置的ACSettingIndex注册表导出后(后缀为.reg)用记事本打开如下(如果厂内所终端所用Win7系统并不是同一版本,可能ACSettingIndex位置会有不同);

Step2:编写更改注册表项脚本

将上步骤中俩个reg文件合并到一起,并重命名为PowerCu.reg(名称随意自定义)用记事本打开如下;

在AD中新建一条组策略,此处命名为Win7电源(每条组策略都有一个对应的共享文件夹,此处的共享文件夹为

\\test.com\SysVol\test.com\Policies\{97CA604D-4FAF-9FFC-4366AAEC84F}\Machine\Scripts\Startup\

将上步骤中的PowerCu.reg文件拷贝到该文件夹中),然后再开机启动脚本策略中添加如下脚本,然后对所有终端下发该策略。

@echo off

echo %PROCESSOR_ARCHITECTURE% | findstr 64 >nul

if ERRORLEVEL 1 goto end

if exist c:\PowerCu.reg goto end

copy \\lyaec.com\SysVol\test.com\Policies\{97CA604D-4FAF-9FFC-4366AAEC84F}\Machine\Scripts\Startup\PowerCu.reg c:\

regedit /s c:\PowerCu.reg

:end

exit

脚本含义如下

echo %PROCESSOR_ARCHITECTURE% | findstr 64 >nul

if ERRORLEVEL 1 goto end

检查系统版本,如果是32位(xp)则直接跳出(goto end)不再执行,因为xp屏保可以用,如果不是32位(win7)则继续执行下一步;

if exist c:\PowerCu.reg goto end

如果C盘中已经存在了PowerCu.reg说明注册表已经执行过了操作,则避免重复执行直接跳出,不再继续执行下一步;

copy \\test.com\SysVol\test.com\Policies\{97CA604D-4FAF-9FFC-4366AAEC84F}\Machine\Scripts\Startup\PowerCu.reg c:\

如果C盘中没有PowerCu.reg说明是第一次接收策略或上次策略没执行成功,则将PowerCu.reg文件拷贝到本地C盘根目录;

regedit /s c:\PowerCu.reg

执行C盘根目录的PowerCu.reg文件

:end

Exit

退出脚本