我需要将 HKCU 键和值添加到特定 OU 中的所有计算机、所有现有用户配置文件和默认配置文件。解决此问题的最佳方法是什么?
我可以枚举并迭代所有 NTUSER.DAT,加载配置单元,添加键,然后卸载配置单元,但这似乎是一种笨拙的方法。
有人有更好的主意吗?我想编写脚本(最好是 PowerShell)并在可能的情况下推动更改,但组策略登录脚本也可以使用。
答案1
我首选的方法是使用 Active Setup。它的作用是检查用户登录计算机时是否运行了特定脚本或命令(例如您将拥有的脚本或命令),如果没有,则执行它。因此,您只需在用户的工作站上为用户运行一次特定脚本。我发现这非常适合写入 HKCU,因为您不必加载每个配置单元,并且只会修改人们登录的帐户。
不是为了自我推销,但我确实写了一篇博客文章关于如何做这件事。基本解决方案如下:
添加以下注册表项:
[HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\UniqueID]
"Version"=""
"Stubpath"=""
@=""
- 您可以选择任何您想要的唯一 ID。通常使用 GUID,但您可以使用任何唯一的 ID。
Version
是您想要使用的任何版本号。Stubpath
是将要执行的命令。MSI、EXE 和 VBS 调用似乎都很好。- 这
@
是命令运行时应该显示的内容。
使用此解决方案,脚本语言无关紧要。您可以编写 VBScript、Powershell 或批处理文件。无论什么都可以让您以登录用户身份写入 HKCU。使用reg.exe
直接工作也很好。
您可以进行的另一个可选的最终操作是加载和修改默认用户配置单元。这将为首次登录该特定系统的任何新用户设置注册表值。
答案2
您可以通过创建自定义 adm 文件并将其作为模板导入到组策略对象的管理模板部分来添加自定义注册表项。然后将该 GPO 链接到您的 OU。有MS 文档关于如何执行此操作,或者您可以查看服务器上已存在的 adm 文件(我认为在 Sysvol 下的某个位置)。
此过程称为“对注册表进行纹身”,这意味着您无法控制组策略删除,即即使删除策略,注册表条目仍将保留。您需要创建一个“反转”注册表项并部署它(或直接删除它)。