l-unix
Goto Top

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.

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

Content-ID: 145054

Url: https://administrator.de/contentid/145054

Ausgedruckt am: 22.11.2024 um 11:11 Uhr

L-UniX
L-UniX 17.06.2010 um 16:23:51 Uhr
Goto Top
Sooooo.... nach nochmaligem Ueberlesen des Codes viel mir noch ein etwas groesserer Fehler auf :D

Hier ist der nun hoffentlich bereinigte Code ;)

On Error resume Next
Const HKEY_LOCAL_MACHINE = &H80000002

strComputer = "."  
strValueName = "Identifier"  
dwValue = 1

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

strKeyPath = "HARDWARE\DESCRIPTION\System\MultifunctionAdapter"  
oReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys

For Each subkey In arrSubKeys
    'Wscript.Echo subkey  
        strRegKey = "HARDWARE\DESCRIPTION\System\MultifunctionAdapter\"  
        strRegKey1 = strRegKey & subkey
        'strRegKey2 = "\DiskController"  
        'strKeyPath = strRegKey1 & strRegKey2  
	strKeyPath = strRegKey1
	'Ausgabe um zu sehen, welchen Wert "strKeyPath" hat  
    	'Wscript.Echo strKeyPath  
    	'oReg.GetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue  
	Set oShell = WScript.CreateObject("WScript.Shell")  
	test = oShell.RegRead("HKLM\" & strKeyPath & "\DiskController\0\DiskPeripheral\0\Identifier")  
	'Ausgabe um zu sehen, welchen Wert "test" hat  
	'Wscript.Echo test  
	'If (test = "0cf7bf30-cc63cc63-A") = TRUE Then  
	'	weitere Befehle die folgen sollen  
	'	Wscript.Echo "juhu"  
	'Else  
	'End If  
	'Ausgabe um zu sehen, welchen Wert "strKeyPath" hat  
	'Wscript.Echo strKeyPath  
	'Ausgabe um zu sehen, welchen Wert "test" hat  
	'Wscript.Echo test  
	dim strText, arrWerte
	strText = test
	arrWerte = Split(strText, "-")  
	'Wscript.Echo arrWerte(1)  
	finalWert = arrWerte(1)
	Set oShell = nothing
	test = ""  
Next
'die Variable "finalwert" enthaelt nun die Disk ID  
Wscript.Echo finalWert