VisualBasic Script - REG_SZ Wert editieren

KaeTuuN

Rear Admiral Pro
Registriert
Okt. 2002
Beiträge
5.332
Hallo CB'ler,
Ich habe mal wieder ein kleines Script Problem... und zwar möchte ich gerne den Wert eines bestehenden Keys editieren OHNE den alten Inhalt zu überschreiben.
Mein Code:
Code:
Option Explicit

const HKEY_CURRENT_USER = &H80000001
const REG_SZ = 1

Dim strKeyPath
Dim WshShell
Dim NewValues

Set WshShell = WScript.CreateObject("WScript.Shell")

NewValues = "Wert1;Vouvouzela;Wert3;VBScript ist doof;Wert5"

strKeyPath = "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\ExcludeProfileDirs"
 
WSHShell.RegWrite strKeyPath, NewValues, "REG_SZ"
Das Problem ist hierbei leider, dass die bestehenden Werte überschrieben werden, was mir leider nichts bringt. :/
Gibt es eine Möglichkeit die bestehenden Werte einfach um neue zu ergänzen?
Und wens geht eine elegantere Lösung als die, einfach vorher die alten Werte auslesen und nachher wieder mit reinschreiben.

Danke schonmal für eure Hilfe.
Mfg Kae
 
Bitte mich zu korrigieren aber i. d. Regel sollte bei einem nicht vorhandene Registry Eintrag ein neuer hinzugefügt werden (weil der Key nicht vorhanden ist), bei einem bestehenden wird es wohl nicht ausbleiben darauf zu prüfen, diesen zu "sichern" und dann erst je nach Fall alles neu zu schreiben ... ich würde das allerdings für die elegante und saubere Methode halten ;-)
 
Zum Erweitern, muß erst einmal der 'alte' Wert ausgelesen werden. 'Alt' und 'Neu' werden wie folgt zusammengebracht :
Code:
'Auslesen ALT
Dim ObjShell
Dim ShellObject 
Set ShellObject = CreateObject("WScript.Shell")
Set ObjShell = CreateObject("WScript.Shell")
ObjShell = ShellObject.RegRead ("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\ExcludeProfileDirs")
'ShellObject.Popup "" & ObjShell ,"4",""
 
'Zusammenbringen ALT + NEU
Dim ObjShell2
Set ObjShell2 = CreateObject("WScript.Shell")
ObjShell2.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\ExcludeProfileDirs", ObjShell & ";TEST"
 
der Key existiert bereits und es stehen auch schon Werte drin. Das Problem ist halt, dass das Script hier nur nen Teil ist und insgesamt ca. 50 mal aufgerufen wird. Da dass ganze im Hintergrund laufen und der Kunde davon nichts mitbekommen soll, sollte es auch möglichst Ressourcenschonend arbeiten.

Mfg Kae
 
Nur als Ansatz, wenn Du weisst wie der Key heist kann Du die Werte doch in ein Array lesen, prüfen und dann die fehlenden Werte hinzufügen ... kann mir kaum vorstellen das das enorme Ressourcen bindet, da Du ja nicht die Registry erst nach dem Key durchsuchen musst um dann die Werte auszulesen.

Die Kollegen hier haben sich einige Funktionen gebaut ...
 
Zuletzt bearbeitet: (Link eingefügt)
@topic
Das zur Verfügung gestellte Script macht genau dies. Es liest den aktuellen Inhalt aus. Fügt im nächsten Schritt den ausgelesen Wert wieder ein + fügt hinten den neuen Wert dran. Wenn das Script 3x hintereinander ausgeführt wird, steht der Ur-Wert + 3x TEST drinnen. Es muß natürlich noch auf die Bedürfnisse angepasst werden. Um welche Registrierungsschlüssel handelt es sich genau?
 
HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\ExcludeProfileDirs

Um genau den Schlüssel, der auch oben steht, damit können lokale Ordner von einer Synchronisation eines Profils ausgenommen werden. Das ganze kann man zwar auch über GPOs machen, allerdings hat man dort nur max. 255 zeichen zur Auswahl, was leider nicht ausreicht, daher dieser Weg hier. :/

Mfg Kae
 
Zurück
Oben