PDA

Vollständige Version anzeigen : [VBScript/Registry]: Unbekannte Anzahl an String Values auslesen


DirkHo
04.04.2007, 10:02
Hi,

folgendes Problem: Ich will mit VBScript auf WinXP-Rechnern aus dem Key

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders

die ganzen Value Namen (z.B. Desktop, AppData, Cache) und deren Werte (z.B. %Username%/Bla, %Username%/Blubb,...) auslesen. Nun ist es aber so, daß ich vorab ja nicht weiß, wieviele Namen-Werte-Paare wirklich in dem Schlüssel enthalten sind. Theoretisch kann sich jeder User ja unendlich viele anlegen.

Kann ich irgendwie einen Blindflug in den Schlüssel machen und dann einfach alles was da drin steht auslesen?

Wäre super, wenn mir da jemand helfen könnte!

Danke und Grüße,

Dirk

_anton_
04.04.2007, 21:43
Hallo Dirk,

versuch's mal damit:
<span style="font-family: Courier New,FixedSys;"><br>&nbsp; <span style="color: #0000CC;">Const</span> HKEY_current_user = &H80000001 <br>&nbsp; msg = &quot;&quot;<br>&nbsp; <span style="color: #0000CC;">Set</span> oReg = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv &quot;) &nbsp; <br>&nbsp; strKeyPath = &quot;Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders&quot;<br>&nbsp; oReg.EnumValues HKEY_current_user, strKeyPath, arrValueNames, arrValueTypes<br>&nbsp; <span style="color: #0000CC;">For</span> i = 0 <span style="color: #0000CC;">To UBound</span>(arrValueNames) &nbsp;<br>&nbsp; &nbsp; oReg.GetStringValue HKEY_current_user, strKeyPath, arrValueNames(i), strValue &nbsp;<br>&nbsp; &nbsp; msg = msg & arrValueNames(i) & vbTab & strValue & vbCr<br>&nbsp; <span style="color: #0000CC;">Next</span> <br>&nbsp; MsgBox msg<br></span>

mfg Anton

DirkHo
05.04.2007, 09:16
Hi Anton,

super, vielen Dank! Aber ich habe noch eine Frage, und zwar steht in dem Registry-Schlüssel %USERPROFILE%/Application Data,..

Bei der Ausgabe wird jedoch %USERPROFILE% in eine Pfadangabe umgewandelt, also in C:\Windows\System32\...

Besteht da die Möglichkeit das zu verhindern oder irgendwie %USERPROFILE% auszulesen (in der Registry hab ich nichts gefunden)? Ich will / muß aber vergleichen, ob die in der Registry gefundenen "Umleitungen", also z.B. für Application Data folgendes ist: %USERPROFILE%/Application Data (zur Not auch mit dem absoluten Pfad).

Wenn dem nicht so ist, will ich die Ordner in einer Excel-Datei aufführen.

Das ist alles so weit kein Problem, nur bräuchte ich dafür ein Format mit dem ich vergleichen kann - also entweder, daß %USERPROFILE% (wäre mir am liebsten) nicht umgewandelt wird, oder eben, daß ich den Pfad auslesen kann der hinter der Systemvariablen steckt.

Kann mir da bitte jemand weiterhelfen?

Danke und Grüße,

Dirk

_anton_
05.04.2007, 09:30
Hallo Dirk,

meinst du so?
<span style="font-family: Courier New,FixedSys;"><br>&nbsp; <span style="color: #0000CC;">Const</span> HKEY_current_user = &H80000001 <br>&nbsp; <span style="color: #0000CC;">Set</span> WshShell = CreateObject(&quot;WScript.Shell&quot;) &nbsp;<br>&nbsp; <span style="color: #0000CC;">Set</span> oReg = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv &quot;) &nbsp; <br>&nbsp; msg = &quot;&quot;<br>&nbsp; strKeyPath = &quot;Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders&quot;<br>&nbsp; oReg.EnumValues HKEY_current_user, strKeyPath, arrValueNames, arrValueTypes<br>&nbsp; <span style="color: #0000CC;">For</span> i = 0 <span style="color: #0000CC;">To UBound</span>(arrValueNames) &nbsp;<br>&nbsp; &nbsp; oReg.GetStringValue HKEY_current_user, strKeyPath, arrValueNames(i), strValue &nbsp;<br>&nbsp; &nbsp; msg = msg & arrValueNames(i) & vbTab & WshShell.RegRead(&quot;HKCU\&quot; & strKeyPath & &quot;\&quot; & arrValueNames(i)) & vbCr <br>&nbsp; <span style="color: #0000CC;">Next</span> <br>&nbsp; MsgBox msg<br></span>

mfg Anton

DirkHo
05.04.2007, 10:37
Hi Anton,

genau so meinte ich das. Super, vielen Dank! Hast mir dadurch viel Arbeit (und Nerven) gespart! Von alleine wäre ich da wohl nicht drauf gekommen...


Vielen Dank und Grüße,

Dirk

DirkHo
05.04.2007, 10:50
Achso: Noch eine Frage: Liest das RegRead den Schlüssel dann lokal (ich will per RemoteZugriff auf einen anderen Rechner zugreifen und dort die Werte auslesen) oder würde er den Schlüssel von dem über oReg verbundenen PC auslesen?

Ich denke, lokal, oder? (Kann's gerade nicht testen, da ich noch am Schreiben des Scripts bin und das an einem normalen Client-PC mache und nicht in dem Test-Netzwerk das für die Migration aufgebaut wurde).
Ich kenne nur die Möglichkeit einen Schlüssel mit WMI auszulesen und die Art liefert mir dann ein Ergebnis wie in deinem ersten Post.

Danke und Grüße,

Dirk