关机期间添加/更新 HKCU 注册表项的组策略脚本

关机期间添加/更新 HKCU 注册表项的组策略脚本

有几种方法可以添加或更新 HKCU 注册表中的项。有几种方法可以使用组策略修改工作站。我尝试了其中几种,我需要一些帮助。

我有一组四个 cscript,我使用 Adersoft 的 VBSEditor 将它们编译为 exe。

这些编译的脚本运行得非常好,并且比运行.vbs 脚本更快。

我有一个用于启动、登录、注销和关机的脚本。目前,这些脚本访问 SQL 服务器和服务器文件共享(仅登录和注销),读取本地注册表并通过 wscript.shell 对象运行一些命令。所有这些都按预期工作,但限制条件是,需要管理员权限的任务必须在关机/启动期间运行,需要网络访问(文件共享和 SQL 服务器)的任务必须在登录和注销期间运行。

当我尝试在 HKCU 中创建和/或修改注册表项时,出现了问题。我可以正常读取这些项,并且我的脚本在从管理员登录会话运行时可以正常工作,但在 GPO 启动、关闭、登录或注销期间运行时,它们什么也不做。

由于缺乏经验,我不知道组策略脚本必须运行的环境的大多数怪癖。

以下是一组在控制台中有效但在 GPO 中失败的命令:

set oRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"
strValueName = "NoControlPanel"
oRegistry.CreateKey HKEY_CURRENT_USER, strKeyPath
oRegistry.SetDWORDValue HKEY_CURRENT_USER,strKeyPath,strValueName,drtval

以下是另一种方法:

strKeyPath = "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"
strValueName = "NoControlPanel"
strKP = strKeyPath + "\" + strValueName
o=wshShell.RegWrite(strKP, drtval, "REG_DWORD")

drtval 是 0 或 1,取决于我是否启用或禁用注册表工具。

有人能看到我做错什么了吗?

我测试此问题的特定工作站是 XP Pro。我有大约 100 个这样的小程序需要通过 GPO 进行管理。

任何帮助,将不胜感激。

答案1

经过多次测试和反复试验,我了解到以下几点:

有时,通常在 HKCU 中创建的注册表项也可以在 HKLM 中创建。

我使用 Google 找到的所有示例都指向修改此键的 HKCU 键。

这在当前会话、regedit 或通过脚本中有效,重新启动后,更改就会生效。

但是在组策略关机脚本中使用该脚本时失败。

我抓住了救命稻草,将脚本 GPO 命令中的配置单元更改为 HKLM,然后瞧......它起作用了。

我不知道具体原因,也许“超级用户”可以为我们解释一下,但我从未发现过以这种方式记录,我希望它可以帮助其他人避免几天的拉扯头发。

更正以用于组策略关闭脚本:

set oRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"
strValueName = "NoControlPanel"
oRegistry.CreateKey HKEY_LOCAL_MACHINE, strKeyPath
oRegistry.SetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,drtval

相关内容