如何检索给定注册表项下的所有内容?

时间:2015-09-16 12:23:49

标签: vbscript registry recursive-query

我有一个脚本检索特定密钥中的所有注册表值(例如:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET),但我需要参考以使该搜索递归。我需要在此密钥下面打印所有注册表和子项(例如:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET

我的脚本示例:

For Each strSubkey In arrSubKeys
  Set objHtml=fso.Opentextfile(strComputer & ".txt",intForWriting,Createfile)

  strValue = Null

  strSubKeyPath = pathKeyReg & "\" & strSubkey
  objRegistry.EnumValues hDefKey, strSubKeyPath, arrValueNames, arrTypes

  For i = LBound(arrValueNames) To UBound(arrValueNames)
    strValueName = arrValueNames(i)
    Select Case arrTypes(i)
      Case REG_SZ          
        objRegistry.GetStringValue hDefKey, strSubKeyPath, strValueName, strValue
        objHtml.WriteLine strSubKeyPath & vbTab & strValueName & vbTab & "(REG_SZ)" & vbTab & strValue 

      ' Show a REG_EXPAND_SZ value
      Case REG_EXPAND_SZ
        objRegistry.GetExpandedStringValue hDefKey, strSubKeyPath, strValueName, strValue
        objHtml.Write strSubKeyPath & vbTab & strValueName & vbTab & "(REG_EXPAND_SZ)" & vbTab & strValue
    End Select
  Next
Next

1 个答案:

答案 0 :(得分:1)

您需要递归到子键中。将您的代码包装在一个过程中,并添加当前密钥enumerates the subkeys的代码,并为每个子密钥调用自己。

Sub RecurseKey(key)
  'enumerate values (your existing code)
  objRegistry.EnumValues hDefKey, key, names, types
  If Not IsNull(names) Then
    For i = 0 To UBound(names)
      name = names(i)
      Select Case types(i)
        Case REG_SZ          
          ...
        Case REG_EXPAND_SZ
          ...
        Case ...
      End Select
    Next
  End If

  'enumerate subkeys and recurse
  objRegistry.EnumKey hDefKey, key, subKeys
  If Not IsNull(subKeys) Then
    For Each sk In subKeys
      RecurseKey key & "\" & sk  '<-- recursion happens here
    Next
  End If
End Sub