Batch zum automatischen Bearbeiten eines Wertes
Hallo,
ich versuche mich gerade daran, einen Wert in der Registry per Batch zu bearbeiten, komme aber nicht so wirklich weiter.
Was soll die Batch können?
Die Batch soll einen Wert (z. B. den Wert AppInit_dlls unter HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows) auslesen.
Für den Fall, dass sich dort bestimmte Pfade (z. B. C:\ordner\unterordner\datei.dll) befinden, sollen diese Pfade aus den Daten gelöscht werden. Beim Wert "AppInit" ist es ja z. B. so, dass sich hier mehrere verschiedene Pfade befinden können.
Dies erscheint mir deutlich schwerer zu sein als das "einfache" Löschen, Leeren oder Hinzufügen eines Wertes.
Könnt Ihr mir diesbezüglich eventuell behilflich sein?
Vielen Dank.
ich versuche mich gerade daran, einen Wert in der Registry per Batch zu bearbeiten, komme aber nicht so wirklich weiter.
Was soll die Batch können?
Die Batch soll einen Wert (z. B. den Wert AppInit_dlls unter HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows) auslesen.
Für den Fall, dass sich dort bestimmte Pfade (z. B. C:\ordner\unterordner\datei.dll) befinden, sollen diese Pfade aus den Daten gelöscht werden. Beim Wert "AppInit" ist es ja z. B. so, dass sich hier mehrere verschiedene Pfade befinden können.
Dies erscheint mir deutlich schwerer zu sein als das "einfache" Löschen, Leeren oder Hinzufügen eines Wertes.
Könnt Ihr mir diesbezüglich eventuell behilflich sein?
Vielen Dank.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 227167
Url: https://administrator.de/contentid/227167
Ausgedruckt am: 23.11.2024 um 02:11 Uhr
20 Kommentare
Neuester Kommentar
Nun prinzipiell geht das per regedit Import per "überschreiben" - ich denke, das lässt sich auch per Batch abbilden, hab ich aber bisher soweit nie gemacht, da solche Anpassungen noch nie im Enterprise Sektor anfielen und für 3-4 PCs lohnt es sich nicht entsprechend zu skripten.
"regedit /s <regdatei>"
oder eben reg --?
sollte dir weiter helfen.
"regedit /s <regdatei>"
oder eben reg --?
sollte dir weiter helfen.
Hallo M-K-D-B,
einfaches Powershell-Script genügt:
(In Zeile 3 die Pfade eintragen die entfernt werden sollen ; mit Komma getrennt)
Grüße Uwe
einfaches Powershell-Script genügt:
(In Zeile 3 die Pfade eintragen die entfernt werden sollen ; mit Komma getrennt)
$key = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows"
# Hier die Pfade eintragen die entfernt werden sollen
$valuesToRemove = @("C:\test.dll","V:\reg.dll")
$arrValues = (Get-ItemProperty $key -Name "AppInit_DLLs").AppInit_DLLs.Replace('"',"").Split(",")
$newValues = ""
$valuesToRemove | %{$arrValues = $arrValues -notlike $_}
$arrValues | %{$newValues += """$_"","}
$newValues = $newValues.TrimEnd(",")
Set-ItemProperty $key -Name "AppInit_DLLs" -Value $newValues
wieso so umständlich? wenn du einfach alles aus dem Wert AppInit_DLLs herauslöschen möchtest machst du das einfach so:
Bitte formuliere dein Anliegen das nächste mal klarer, am Anfang wolltest du nur bestimmte Pfade aus einem Wert herauslöschen und auf einmal alles.
Grüße Uwe
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs /d "" /f
Grüße Uwe
Zitat von @M-K-D-B:
Es soll quasi "AppInit_DLLs"="" importiert werden. Was muss ich unter findstr ändern?
Es soll quasi "AppInit_DLLs"="" importiert werden. Was muss ich unter findstr ändern?
Hey,
Findstr
unterstützt keine 2Byte-Zeichensätze. Du kannst es mit find
versuchen.Gruss.
Powershell-Script das das gewüschte alles erledigt ...
(In Zeile 3 jeweils die Pfade mit Komma getrennt eintragen die aus AppInit_DLLs entfernt werden sollen)
Probiers halt mal aus
Grüße Uwe
(In Zeile 3 jeweils die Pfade mit Komma getrennt eintragen die aus AppInit_DLLs entfernt werden sollen)
$key = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows"
# Hier die Pfade eintragen die entfernt werden sollen
$valuesToRemove = @("C:\test.dll","V:\reg.dll")
$arrValues = (Get-ItemProperty $key -Name "AppInit_DLLs").AppInit_DLLs.Replace('"',"").Split(",")
$newValues = ""
$valuesToRemove | %{$arrValues = $arrValues -notlike $_}
$arrValues | %{$newValues += """$_"","}
$newValues = $newValues.TrimEnd(",")
Set-ItemProperty $key -Name "AppInit_DLLs" -Value $newValues
Grüße Uwe
Zitat von @M-K-D-B:
vielen Dank für dein Powershell-Script, nur muss ich gestehen, dass ich mich damit (Powershell) überhaupt nicht
auskenne...
Kann man mit batch ein powershell-script ausführen?
klarvielen Dank für dein Powershell-Script, nur muss ich gestehen, dass ich mich damit (Powershell) überhaupt nicht
auskenne...
Kann man mit batch ein powershell-script ausführen?
Ich schau mal, dass ich zu Informationen komme...
Anleitung: Wie starte ich Powershell-Scripte
- Zuerst speicherst man den Code in einer Textdatei mit der Endung .ps1.
- Wenn man zum ersten mal Powershell-Scripte ausführt, musst man einmalig vorher noch das Ausführen von Scripten im User-Account freischalten. Dazu öffnet man eine Powershell-Konsole und gibt dort den Befehl
Set-ExecutionPolicy RemoteSigned -Force
ein. Um diese Policy für alle User auf dem Rechner zu setzen muss man diesen Befehl in einer Powershell-Konsole mit Admin-Rechten starten. Noch ein Hinweis für 64-Bit-Systeme: Hier sollte sowohl für die 32bit und 64Bit Variante der Powershell die Policy in einer Admin-Konsole gesetzt werden:Set-ExecutionPolicy RemoteSigned -Force; start-job { Set-ExecutionPolicy RemoteSigned -Force } -RunAs32
- Jetzt kann das Powershell-Script in der Konsole mit Eingabe des kompletten Pfades der Scriptdatei, oder mit einem Rechtsklick auf die Script-Datei :Mit Powershell ausführen gestartet werden.
Starten eines Scriptes in einer Powershell-Konsole
Immer den kompletten Pfad zum Script angeben, und wenn er Leerzeichen beinhaltet in Anführungszeichen einschließen:"C:\Pfad\script.ps1"
.\script.ps1
Methoden zum Starten von PS-Scripten aus Batch und Kommendozeilen heraus:
Hier gibt es unterschiedliche Methoden, je nach Anforderungen gibt es hier einige Besonderheiten vor allem bei Leerzeichen in Pfaden zu beachten!Der einfachste Aufruf sieht hier so aus:
powershell.exe -File "C:\Pfad\Script.ps1"
powershell.exe -File "C:\Pfad\Script.ps1" "Parameter 1" "Parameter 2"
powershell.exe -command "&'C:\Pfad\Script.ps1' -par1 'Wert1' -par2 'Wert2'"
powershell.exe -command "&'C:\Pfad\Script1.ps1';&'C:\Pfad\Script2.ps1'"
Zitat von @M-K-D-B:
danke für den Tipp, aber
danke für den Tipp, aber
find
löscht mir den ganzen Wert aus der .reg Datei raus.find
löscht die "Null"-Bytes aus dem UTF-16LE, sonst nichts.Gruss.
Moin,
die 2. Code-Zeile liest die erste Zeile aus %temp%\var.txt, welche deine Registry Value darstellen sollte.
Meine Lösung würde so aussehen, da ich feststellen musste, dass reg query ja in mehreren Zeilen auswirft:
Infos zum ersetzen von Strings:
http://ss64.com/nt/syntax-replace.html
und zu der Query:
http://www.computerbase.de/forum/showthread.php?t=148837&p=1450674# ...
möglicherweise musst du die tokenanzahl anpassen, wenn du Leerzeichen in der Value hast. und eben den zu ersetzenden String
Ganz ohne Powershell und Co :P
Gruß
Chris
die 2. Code-Zeile liest die erste Zeile aus %temp%\var.txt, welche deine Registry Value darstellen sollte.
Meine Lösung würde so aussehen, da ich feststellen musste, dass reg query ja in mehreren Zeilen auswirft:
FOR /F "tokens=3 skip=2" %%i IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs') DO SET "oldpath=%%i"
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs /d "%oldpath:zuersetzenderstring=%" /f
Infos zum ersetzen von Strings:
http://ss64.com/nt/syntax-replace.html
und zu der Query:
http://www.computerbase.de/forum/showthread.php?t=148837&p=1450674# ...
möglicherweise musst du die tokenanzahl anpassen, wenn du Leerzeichen in der Value hast. und eben den zu ersetzenden String
Ganz ohne Powershell und Co :P
Gruß
Chris