2013-08-07 26 views
5

Ich möchte alle Werte eines Registrierungspfads einschließlich der Werte seiner Unterordner erhalten. Im Moment lese ich die Werte von einem einzelnen Ordner durch das:Iterate durch Registry-Unterordner

const HKEY_LOCAL_MACHINE = &H80000002 
strComputer = "." 

Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_ 
strComputer & "\root\default:StdRegProv") 

strKeyPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" 
oReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys 

For Each subkey In arrSubKeys 
    msgbox subkey ' Just for debugging 
Next 

Dies funktioniert gut, aber zusätzlich muss ich eine Liste des Ordners Unterordner erhalten.

Ich möchte ein Ergebnis erhalten (nur der Inhalt ist wichtig, nicht die Formatierung und keine Notwendigkeit, sie in eine Datei zu schreiben), wie die dieser Befehl gibt mir:

regedit /e c:\testfile.reg 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 

Gibt es eine Möglichkeit, Tun Sie dies in Vbs oder muss ich den Regedit-Befehl von Windows mit einem Wscript.Shell-Aufruf verwenden.

Antwort

9

Sie müssen in die Unterschlüssel recurse. Versuchen Sie folgendes:

Const HKEY_LOCAL_MACHINE = &H80000002 
strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" 

Sub EnumerateKeys(hive, key) 
    WScript.Echo key 
    reg.EnumKey hive, key, arrSubKeys 
    If Not IsNull(arrSubKeys) Then 
    For Each subkey In arrSubKeys 
     EnumerateKeys hive, key & "\" & subkey 
    Next 
    End If 
End Sub 

Set reg = GetObject("winmgmts://./root/default:StdRegProv") 

EnumerateKeys HKEY_LOCAL_MACHINE, strKeyPath 
+1

dies sehr gut gearbeitet, thx –

5

Zusätzlich ich ein wirklich gutes Beispiel im Internet gefunden:

' Constants (taken from WinReg.h) 
' 
Const HKEY_CLASSES_ROOT = &H80000000 
Const HKEY_CURRENT_USER = &H80000001 
Const HKEY_LOCAL_MACHINE = &H80000002 
Const HKEY_USERS   = &H80000003 

Const REG_SZ  = 1 
Const REG_EXPAND_SZ = 2 
Const REG_BINARY = 3 
Const REG_DWORD  = 4 
Const REG_MULTI_SZ = 7 

' Chose computer name, registry tree and key path 
' 
strComputer = "." ' Use . for current machine 
hDefKey = HKEY_LOCAL_MACHINE 
strKeyPath = "SOFTWARE\Microsoft\Cryptography\Defaults\Provider" 

' Connect to registry provider on target machine with current user 
' 
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") 

' Enum the subkeys of the key path we've chosen 
' 
oReg.EnumKey hDefKey, strKeyPath, arrSubKeys 

For Each strSubkey In arrSubKeys 

    ' Show the subkey 
    ' 
    wscript.echo strSubkey 

    ' Show its value names and types 
    ' 
    strSubKeyPath = strKeyPath & "\" & strSubkey 
    oReg.EnumValues hDefKey, strSubKeyPath, arrValueNames, arrTypes 

    For i = LBound(arrValueNames) To UBound(arrValueNames) 
    strValueName = arrValueNames(i) 
    Select Case arrTypes(i) 

     ' Show a REG_SZ value 
     ' 
     Case REG_SZ   
     oReg.GetStringValue hDefKey, strSubKeyPath, strValueName, strValue 
     wscript.echo " " & strValueName & " (REG_SZ) = " & strValue 

     ' Show a REG_EXPAND_SZ value 
     ' 
     Case REG_EXPAND_SZ 
     oReg.GetExpandedStringValue hDefKey, strSubKeyPath, strValueName, strValue 
     wscript.echo " " & strValueName & " (REG_EXPAND_SZ) = " & strValue 

     ' Show a REG_BINARY value 
     '   
     Case REG_BINARY 
     oReg.GetBinaryValue hDefKey, strSubKeyPath, strValueName, arrBytes 
     strBytes = "" 
     For Each uByte in arrBytes 
      strBytes = strBytes & Hex(uByte) & " " 
     Next 
     wscript.echo " " & strValueName & " (REG_BINARY) = " & strBytes 

     ' Show a REG_DWORD value 
     ' 
     Case REG_DWORD 
     oReg.GetDWORDValue hDefKey, strSubKeyPath, strValueName, uValue 
     wscript.echo " " & strValueName & " (REG_DWORD) = " & CStr(uValue)    

     ' Show a REG_MULTI_SZ value 
     ' 
     Case REG_MULTI_SZ 
     oReg.GetMultiStringValue hDefKey, strSubKeyPath, strValueName, arrValues         
     wscript.echo " " & strValueName & " (REG_MULTI_SZ) =" 
     For Each strValue in arrValues 
      wscript.echo " " & strValue 
     Next 

    End Select 
    Next 

Next