在注册表中搜索键 - JScript

标签 search vbscript registry jscript wsh

有没有办法使用 Windows Scripting Host 在注册表中搜索特定键?

我正在使用 JavaScript (Jscript/VBScript?) 来执行此操作,而 msdn 库未提及任何此类方法:http://msdn.microsoft.com/en-us/library/2x3w20xf(v=VS.85).aspx

谢谢,


所以这里是问题的更新:

这个问题比直接搜索注册表要复杂一些。我必须查看 Windows 框中已安装的产品,才能找到我要删除的特定产品条目。注册表路径定义为:

HKEY_LOCAL_MACHINE\Software\Microsoft...\Products。

在 Products 键中,列出了已安装的产品,但它们的键被定义为哈希码。在产品键中还有其他具有定义名称和定义值的键。我希望能够搜索后面的键和值。我怎么能做到这一点,绕过未知的哈希码?

例如,我需要查找 DisplayVersion key = 1.0.0 的产品。该 key 的路径是:

HKLM\Software\Microsoft\Windows\CurrentVersion\Installer\UserData\Products\A949EBE4EED5FD113A0CB40EED7D0258\InstallProperties\DisplayVersion。

如何获取或避免写入产品 key :A949EBE4EED5FD113A0CB40EED7D0258 ??

最佳答案

假设您通过 Windows Scripting Host 使用 JScript(而不是浏览器中的 JavaScript),您可以使用 WScript.RegRead 获取特定键的值方法:

// MyScript.js
var key = 'HKEY_CURRENT_USER\\SessionInformation\\ProgramCount'
  , wsh = WScript.CreateObject('WScript.Shell')
  , val = wsh.RegRead(key);
WScript.Echo('You are currently running ' + val + ' programs.');

如果您确实需要根据某些条件而不是已知的注册表键来搜索键或值,那么您可以实现自己的递归搜索算法,其中“REG_SZ”类型的注册表值是叶节点。

为了更熟悉 Windows Scripting Host 上的 JScript,我做了一个 small interface to the registry 的练习。正是这样做的。项目中包含的示例显示了如何在 WSF 脚本中执行此类注册表搜索:

<job id="FindDisplayVersions">
  <script language="jscript" src="../registry.js"/>
  <script language="jscript">
    // Search the registry and gather 20 DisplayVersion values.
    var reg = new Registry()
      , rootKey = 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\S-1-5-18\\Products'
      , keyRegex = /Products\\(.*?)\\InstallProperties\\DisplayVersion$/
      , valRegex = /^1\./
      , maxResults = 20
      , uids = [];
    reg.find(rootKey, function(path, value) {
      var keyMatch = keyRegex.exec(path);
      if (keyMatch) {
        if (valRegex.exec(value)) {
          uids.push(keyMatch[1] + '\t=\t' + value);
          if (uids.length >= maxResults) { return false; } // Stop searching
        }
      }
      return true; // Keep searching.
    });
    WScript.Echo(uids.join("\n"));
  </script>
</job>

请注意,正如@Robert Harvey 指出的那样,如果根键连接得太深,这可能需要很长时间。简单的测试只需要几秒钟我选择的 key ,但你的里程可能会有所不同;当然,没有保修或适用性,如果您的计算机发生故障,请不要怪我。

关于在注册表中搜索键 - JScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2822535/

相关文章:

c++ - 在 C/C++ 中进行大文本关键字搜索的最快方法

asp-classic - VBScript (ASP) 服务器组件驻留在哪里?

oop - 你能用 vbscript 和 ASP 上课吗?

windows - 如何将多个关联文件传递给一个程序?

python - 哪种算法可以更快地对这些数字对进行排序?

搜索索引 Windows SMB 文件共享的解决方案

java - 为 swing 应用程序创建快捷方式的选项

c# - 无法创建 C# COM 对象(类未注册)

java - Windows 注册表 -- 子项列表

search - solr 可以返回函数值(不是 solr 分数或文档字段)吗?