In der Registry nach einem dynamischen Schluessel suchen und den Wert auslesen VBS
Einen dynamischen Registryschluessel auslesen und den Wert extrahieren
Moin liebe Leutz,
ich habe ein kleines Problem....
Bisher habe ich mich durch diese beiden Beitraege aus dem Administrator-Forum und durch diverse andere Foren gelesen,
doch ich komme einfach nicht auf des Raetsels Loesung.
Beitraege:
Registry durchsuchen, Pfad kopieren, in Variable setzen
Nun zu meinem Problem.
Ich habe einen Registry-Schluessel "HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\6\DiskController\0\DiskPeripheral\0\Identifier" dieser besitzt einen sich Wert, welchen ich zwingend benoetige.
Das Problem ist nun, dass bis zum Punkt "MultifunctionAdapter" alles gleich ist, allerdings nach diesem Punkt, alles dynamisch fotlaeuft.
Z.B. kann dieser Schluessel "HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\6\DiskController\0\DiskPeripheral\0" auf
einem anderen System so aussehen -> "HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\43\DiskController\0\DiskPeripheral\0"
Es veraendert sich also immer die Zahl vor dem "DiskController".
Ich habe mir mit Hilfe der oben genannten Beitraege nun folgendes Script zusammengebaut.
Das Script geht zunaechst in den Schluessel diesen "HARDWARE\DESCRIPTION\System\MultifunctionAdapter" und prueft dann mit Hilfe der For-Each-Schleife ab,
ob der Eintrag "Identifier" bzw. "\DiskController\0\DiskPeripheral\0\Identifier" gefunden wird.
Soweit funktioniert das auch, ich bekomme auch den Wert von "Identifier" ausgelesen, aber was mich verwundert ist, dass das Script anscheinend nicht abprueft ob der
Pfad des Schluessels auch wirklich existiert.
Zur Verdeutlichung:
Auf meinem System gibt es zweimal den Eintrag "Identifier".
1. "HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\6\DiskController\0\DiskPeripheral\0\Identifier" mit dem Wert "0cf7bf30-cc63cc63-A"
2. "HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\7\Identifier" mit dem Wert "ACPI BIOS"
Wenn mein Script nun die ersten Teil des Registrypfades nimmt und mit dem Wert des subkey's verknuepft und dann \DiskController\0\DiskPeripheral\0\Identifier anhaengt,
dann findet es zweimal einen Eintrag, obwohl der Pfad ein voellig anderer ist.
Irgendwo habe ich einen Denkfehler, nur finde ich diesen nicht.
Ich hoffe ihr koennt mir helfen....
Danke an jeden, der diesen Beitrag zumindest liest :D
Gruß
L-UniX
Moin liebe Leutz,
ich habe ein kleines Problem....
Bisher habe ich mich durch diese beiden Beitraege aus dem Administrator-Forum und durch diverse andere Foren gelesen,
doch ich komme einfach nicht auf des Raetsels Loesung.
Beitraege:
Registry durchsuchen, Pfad kopieren, in Variable setzen
Nun zu meinem Problem.
Ich habe einen Registry-Schluessel "HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\6\DiskController\0\DiskPeripheral\0\Identifier" dieser besitzt einen sich Wert, welchen ich zwingend benoetige.
Das Problem ist nun, dass bis zum Punkt "MultifunctionAdapter" alles gleich ist, allerdings nach diesem Punkt, alles dynamisch fotlaeuft.
Z.B. kann dieser Schluessel "HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\6\DiskController\0\DiskPeripheral\0" auf
einem anderen System so aussehen -> "HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\43\DiskController\0\DiskPeripheral\0"
Es veraendert sich also immer die Zahl vor dem "DiskController".
Ich habe mir mit Hilfe der oben genannten Beitraege nun folgendes Script zusammengebaut.
Const HKEY_LOCAL_MACHINE = &H80000002
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
'Dim arrSubKeys()
strKeyPath = "HARDWARE\DESCRIPTION\System\MultifunctionAdapter"
oReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
On Error Resume Next
For Each subkey In arrSubKeys
strSubKey = "HARDWARE\DESCRIPTION\System\MultifunctionAdapter\" & subkey
Set oShell = WScript.CreateObject("WScript.Shell")
Wscript.Echo strSubKey
test = oShell.RegRead("HKLM\" & strSubKey & "\DiskController\0\DiskPeripheral\0\Identifier")
Wscript.Echo test
If Err.Number <> 0 Then
Wscript.Echo "Schlüssel ist nicht vorhanden"
End If
Next
Das Script geht zunaechst in den Schluessel diesen "HARDWARE\DESCRIPTION\System\MultifunctionAdapter" und prueft dann mit Hilfe der For-Each-Schleife ab,
ob der Eintrag "Identifier" bzw. "\DiskController\0\DiskPeripheral\0\Identifier" gefunden wird.
Soweit funktioniert das auch, ich bekomme auch den Wert von "Identifier" ausgelesen, aber was mich verwundert ist, dass das Script anscheinend nicht abprueft ob der
Pfad des Schluessels auch wirklich existiert.
Zur Verdeutlichung:
Auf meinem System gibt es zweimal den Eintrag "Identifier".
1. "HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\6\DiskController\0\DiskPeripheral\0\Identifier" mit dem Wert "0cf7bf30-cc63cc63-A"
2. "HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\7\Identifier" mit dem Wert "ACPI BIOS"
Wenn mein Script nun die ersten Teil des Registrypfades nimmt und mit dem Wert des subkey's verknuepft und dann \DiskController\0\DiskPeripheral\0\Identifier anhaengt,
dann findet es zweimal einen Eintrag, obwohl der Pfad ein voellig anderer ist.
Irgendwo habe ich einen Denkfehler, nur finde ich diesen nicht.
Ich hoffe ihr koennt mir helfen....
Danke an jeden, der diesen Beitrag zumindest liest :D
Gruß
L-UniX
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 145054
Url: https://administrator.de/contentid/145054
Ausgedruckt am: 22.11.2024 um 11:11 Uhr
1 Kommentar