Windows批处理操作注册表与组策略

  最近需要写一些 Windows 相关的安全加固脚本,Alliot 批处理写的不多,在这过程中遇到了一些小坑,本文对此做一些记录。

编码

批处理

  编码一直是个遭天杀的东西,Windows 下的批处理在包含中文字符的时候,应该使用 ANSI 的编码,编码字符集选择中文 - GB2312(Simplified),否则在运行的时候会出现乱码的情况。

.inf编码

  与上面不同,组策略导出的 .inf 文件的编码为 Unicode(UTF-16)LE带签名,而不是 UTF-8。否则通过导入 .inf 配置文件来配置组策略的时候会出现失败或不生效的情况。

注册表与组策略

  先来看二者的定义:注册表(registry)是 Windows 下储存系统与应用程序配置设置信息的数据库;组策略(Group Policy)是用来定义并控制程序、网络资源及操作系统行为的主要工具。其实说白了就是 Windows 大部分的系统、软件配置,是通过操作注册表来实现的,但是注册表不是很方便阅读,就出现了组策略这个东西,绝大部分的组策略都有相对应的注册表键值。

注册表操作

  在 “HKEY_CURRENT_USER\Control Panel\Desktop” 下添加一个类型为 “REG_SZ” 的ScreenSaveActive” 注册表,数值为 “1”(存在则修改):

1
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_SZ /d "1" /f  

其中 “HKEY_CURRENT_USER\Control Panel\Desktop” 表示注册表路径,”/v” 表示注册表 Value(名称),”/t” 表示类型,”/d” 表示数值,”/f” 表示强制。
每个注册表对应的含义到哪里找呢?
微软的文档

组策略操作

  批处理对组策略修改,推荐使用将现有的策略导出后进行修改。

导出现有的组策略
1
secedit /export /cfg gp.inf
组策略 .inf 语法检查
1
组策略 .inf 语法检查
导入组策略(这里要注意 .inf 文件的编码)
1
secedit /configure /db 1.sdb /cfg 1gp.inf /log 1.log /quiet

其中 “/db” 指定用来执行安全性配置的数据库,”/cfg” 指定在配置次计算机前要导入到数据库的安全性模板,”/log” 指定要记录配置操作状态的文件,”/quiet” 指定配置操作的执行不需要提示用户进行任何确认。

强制刷新组策略
1
gpupdate /force