0

我需要创建一个依赖 WMI 的脚本来执行以下操作:

  1. 检查注册表值是否存在,以及它是否具有所需的类型
  2. 如果注册表值存在但类型错误,请将其删除
  3. 如果注册表值不存在,或者在步骤 #2 中被删除,则使用特定类型创建它
  4. 如果注册表值存在类型正确,请确保其值正确

我在 Internet 上找到的几乎所有注册表操作 VBScript 代码片段都依赖于 WMI。由于某些原因,这是不可接受的。

您对如何在不依赖 WMI 的情况下操作注册表有任何建议吗?

4

1 回答 1

0

Windows Scripting Host (WSH) 中的 VBScript/JScript确实具有来自WScript.Shell对象的注册表功能,但它们仅限于读取、写入和删除键/值。没有任何功能可以检索注册表项或值的存在,除非通过读取它并检查结果。检索注册表值类型的函数也不存在。

除了从 WMI 对象访问注册表的其他方法是通过函数使用打包的REG.EXE命令行工具。WScript.Shell.Exec这是通过使用QUERY, ADD, DELETE, IMPORT, 或EXPORT命令参数来完成的。运行REG.EXE显示使用摘要,或REG.EXE QUERY /?,REG.EXE EXPORT /?等显示命令使用详情。

如果存在,命令的输出QUERY将显示值数据及其类型。该EXPORT命令也可以使用,除了它将结果保存在REG文件中。工具的结果REG.EXE也可以在CMD.EXE. 例如:

CMD.EXE /C REG.EXE QUERY "HKEY_CURRENT_USER\Control Panel\Cursors" > "reg output.txt"

请注意,文件output.txt的内容与文件的内容不同REG。该REG文件具有标准格式,在 Microsoft 知识库KB310516中有部分描述。

通过检查REG.EXE工具的退出代码,并解析其输出或生成的REG文件,检索注册表值类型是可能的。WScript.Shell如果可能并且如果性能是一个问题,应该使用可以使用对象完成的注册表操作。

于 2012-08-28T10:41:35.323 回答