Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch zum automatischen Bearbeiten eines Wertes

Frage Entwicklung Batch & Shell

Mitglied: M-K-D-B

M-K-D-B (Level 1) - Jetzt verbinden

21.01.2014, aktualisiert 23.01.2014, 2604 Aufrufe, 20 Kommentare, 1 Danke

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.
Mitglied: M-K-D-B
21.01.2014 um 17:15 Uhr
Hallo certifiedit,

vielen Dank für deine schnelle Antwort.


Diese Seite kenn ich zur Genüge, es hilft mir leider gar nicht weiter, trotzdem danke schon mal.

Ich versuche derzeit, das oben beschriebene Problem mit einer for Schleife in den Griff zu bekommen, aber wie man einen neuen Wert auf einen alten "legt", weiß ich nicht.
Bitte warten ..
Mitglied: certifiedit.net
21.01.2014 um 17:19 Uhr
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.
Bitte warten ..
Mitglied: M-K-D-B
21.01.2014, aktualisiert um 17:30 Uhr
Hallo,

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.
Verstehe ich dich richtig?
Du meinst, ich solle den Wert exportieren, dann z. B. mit find oder findstr das entsprechene suchen lassen und dann wieder einfügen?
Bitte warten ..
Mitglied: certifiedit.net
21.01.2014 um 17:41 Uhr
Genau, oder, wenn es immer derselbe ist: Einfach dort hineinpacken, entweder per file.reg oder eben per reg importieren. ;)

Im Zweifelsfall, wenn es nicht unterschiedliche Werte sein müssen brauchst du gar keine Abfrage ob, ein pures überschreiben kostet dich im @all weniger Zeit und Aufwand.
Bitte warten ..
Mitglied: mech01
21.01.2014 um 18:47 Uhr
Moin,

muss es zwangsläufig Batch sein? WSH wäre doch eigentlich besser für diese Aufgabe geeignet oder?

LG
Bitte warten ..
Mitglied: colinardo
21.01.2014, aktualisiert 22.01.2014
Hallo M-K-D-B,
einfaches Powershell-Script genügt:
(In Zeile 3 die Pfade eintragen die entfernt werden sollen ; mit Komma getrennt)
01.
$key = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" 
02.
# Hier die Pfade eintragen die entfernt werden sollen 
03.
$valuesToRemove = @("C:\test.dll","V:\reg.dll") 
04.
$arrValues = (Get-ItemProperty $key -Name "AppInit_DLLs").AppInit_DLLs.Replace('"',"").Split(",") 
05.
$newValues = "" 
06.
$valuesToRemove | %{$arrValues = $arrValues -notlike $_} 
07.
$arrValues | %{$newValues += """$_"","} 
08.
$newValues = $newValues.TrimEnd(",") 
09.
Set-ItemProperty $key -Name "AppInit_DLLs" -Value $newValues
Grüße Uwe
Bitte warten ..
Mitglied: M-K-D-B
21.01.2014 um 19:30 Uhr
Hallo,

vielen Dank schon mal für die weiteren Antworten.


p.s. was noch wichtig wäre, sind die Pfade in AppInit_DLLs bei dir mit [http://support.microsoft.com/kb/197571/de
Leerzeichen oder mit Komma] voneinander getrennt ?
Durch Komma.

Kann mir jemand sagen, warum folgendes nicht funktioniert?

regedit /e "%temp%\export_AppInit_dlls.reg" "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows"
findstr /v /i /c:"C:\\ordner\\unterordner\\datei.dll," "%temp%\export_AppInit_dlls.reg" >> "%temp%\import_AppInit_dlls.reg"
regedit /S "%temp%\import_AppInit_dlls.reg"
del /f/q "%temp%\export_AppInit_dlls.reg" 2>nul 1>nul
del /f/q "%temp%\import_AppInit_dlls.reg" 2>nul 1>nul
pause

Der Fehler muss in der 2. zeile liegen, denn mit der option "/v" sollte eigentlich alles außer der String "C:\\ordner\\unterordner\\datei.dll," in die import.reg befördert werden, tut es aber nicht.

Hier der Inhalt meiner export_AppInit_dlls.reg:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows]
"IconServiceLib"="IconCodecService.dll"
"DdeSendTimeout"=dword:00000000
"DesktopHeapLogging"=dword:00000001
"GDIProcessHandleQuota"=dword:00002710
"ShutdownWarningDialogTimeout"=dword:ffffffff
"USERNestedWindowLimit"=dword:00000032
"USERPostMessageLimit"=dword:00002710
"USERProcessHandleQuota"=dword:00002710
@="mnmsrvc"
"DeviceNotSelectedTimeout"="15"
"Spooler"="yes"
"TransmissionRetryTimeout"="90"
"AppInit_DLLs"="C:\\ordner\\unterordner\\datei.dll,"


Es soll quasi "AppInit_DLLs"="" importiert werden. Was muss ich unter findstr ändern?


Vielen Dank!
Bitte warten ..
Mitglied: colinardo
21.01.2014, aktualisiert um 21:34 Uhr
wieso so umständlich? wenn du einfach alles aus dem Wert AppInit_DLLs herauslöschen möchtest machst du das einfach so:
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs /d "" /f
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
Bitte warten ..
Mitglied: Endoro
21.01.2014 um 20:22 Uhr
Zitat von M-K-D-B:
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.
Bitte warten ..
Mitglied: M-K-D-B
22.01.2014 um 07:17 Uhr
Guten Morgen,

Zitat von colinardo:

wieso so umständlich? wenn du einfach alles aus dem Wert AppInit_DLLs herauslöschen möchtest machst du das
einfach so:
> reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs /d "" /f 
> 
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.
mein Anliegen habe ich im ersten Post klar formuliert. Da beispielsweise im Wert AppInit_Dlls verschiedene Pfade vorliegen können, möchte ich bestimmte Pfade daraus entfernen können. Der von dir genannte Befehl zur Leerung des o. g. Wertes ist mir wohl bekannt.
Der Pfad "C:\Ordner\unterordner\datei.dll," dient lediglich als "einfaches Beispiel".
Vielen Dank, dass du dran bleibst.


Zitat von Endoro:
Hey,
Findstr unterstützt keine 2Byte-Zeichensätze. Du kannst es mit find versuchen.
Gruss.
Danke für den Tipp, ich werde es heute Nachmittag austesten.
Bitte warten ..
Mitglied: Sheogorath
LÖSUNG 22.01.2014, aktualisiert 23.01.2014
Moin,

Zum auslesen und ändern könntest du hiermit arbeiten:
01.
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs >%temp%\var.txt 
02.
SET /p oldpath=<%temp%\var.txt 
03.
 
04.
del /f/q "%temp%\var.txt" >nul 
05.
 
Gruß
Chris
Bitte warten ..
Mitglied: M-K-D-B
22.01.2014 um 16:17 Uhr
Hallo,



Findstr unterstützt keine 2Byte-Zeichensätze. Du kannst es mit find versuchen.
Gruss.
danke für den Tipp, aber find löscht mir den ganzen Wert aus der .reg Datei raus.
Bitte warten ..
Mitglied: M-K-D-B
22.01.2014 um 17:17 Uhr
Hallo Chris,


Zum auslesen und ändern könntest du hiermit arbeiten:
<code>
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs >%temp%\var.txt
SET /p oldpath=<%temp%\var.txt

del /f/q "%temp%\var.txt" >nul
danke für deine Anregung. Komme zwar mit deiner 2. Zeile nicht klar bzw. weiß noch nicht, wie ich von hier weitermachen soll, aber ich schaus mir mal an.
Bitte warten ..
Mitglied: colinardo
22.01.2014, aktualisiert um 17:26 Uhr
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)
01.
$key = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" 
02.
# Hier die Pfade eintragen die entfernt werden sollen 
03.
$valuesToRemove = @("C:\test.dll","V:\reg.dll") 
04.
$arrValues = (Get-ItemProperty $key -Name "AppInit_DLLs").AppInit_DLLs.Replace('"',"").Split(",") 
05.
$newValues = "" 
06.
$valuesToRemove | %{$arrValues = $arrValues -notlike $_} 
07.
$arrValues | %{$newValues += """$_"","} 
08.
$newValues = $newValues.TrimEnd(",") 
09.
Set-ItemProperty $key -Name "AppInit_DLLs" -Value $newValues
Probiers halt mal aus
Grüße Uwe
Bitte warten ..
Mitglied: M-K-D-B
22.01.2014, aktualisiert um 18:21 Uhr
Hallo Uwe,


Zitat von colinardo:

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)
01.
> $key = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" 
02.
> # Hier die Pfade eintragen die entfernt werden sollen 
03.
> $valuesToRemove = @("C:\test.dll","V:\reg.dll") 
04.
> $arrValues = (Get-ItemProperty $key -Name 
05.
> "AppInit_DLLs").AppInit_DLLs.Replace('"',"").Split(",") 
06.
> $newValues = "" 
07.
> $valuesToRemove | %{$arrValues = $arrValues -notlike $_} 
08.
> $arrValues | %{$newValues += """$_"","} 
09.
> $newValues = $newValues.TrimEnd(",") 
10.
> Set-ItemProperty $key -Name "AppInit_DLLs" -Value $newValues 
11.
> 

Probiers halt mal aus
Grüße Uwe
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?
Ich schau mal, dass ich zu Informationen komme...
Bitte warten ..
Mitglied: colinardo
22.01.2014, aktualisiert 27.06.2014
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?
klar
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"
Liegt das Script im selben Verzeichnis in dem man sich gerade befindet, kann man es auch so abkürzen:
.\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"
Wenn man dem Script Parameter übergeben möchte:
powershell.exe -File "C:\Pfad\Script.ps1" "Parameter 1" "Parameter 2"
Wenn man "benannte" Parameter übergeben möchte (die einfachen Hochkommas um den Scriptpfad werden benötigt wenn er Leerzeichen beinhaltet):
powershell.exe -command "&'C:\Pfad\Script.ps1' -par1 'Wert1' -par2 'Wert2'"
Man kann auch mehrere Scripte hintereinander ausführen lassen:
powershell.exe -command "&'C:\Pfad\Script1.ps1';&'C:\Pfad\Script2.ps1'"
.
Bitte warten ..
Mitglied: Endoro
22.01.2014 um 20:31 Uhr
Zitat von M-K-D-B:
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.
Bitte warten ..
Mitglied: Sheogorath
LÖSUNG 23.01.2014, aktualisiert um 15:58 Uhr
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:
01.
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" 
02.
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
Bitte warten ..
Mitglied: M-K-D-B
23.01.2014, aktualisiert um 15:59 Uhr
Hallo,


Zitat von Sheogorath:
Infos zum ersetzen von Strings:
http://ss64.com/nt/syntax-replace.html
auf der Seite war ich gestern auch schon, hab aber bei %variable:StrToFind=NewStr% wohl zu kompliziert gedacht.


Zitat von Sheogorath:
01.
FOR /F "tokens=3 skip=2" %%i IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows 
02.
> NT\CurrentVersion\Windows" /v AppInit_DLLs') DO SET "oldpath=%%i" 
03.
> reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs /d 
04.
> "%oldpath:zuersetzenderstring=%" /f  
05.
> 
und zu der Query:
http://www.computerbase.de/forum/showthread.php?t=148837&p=1450674# ...
das funktioniert sehr gut.


möglicherweise musst du die tokenanzahl anpassen, wenn du Leerzeichen in der Value hast. und eben den zu ersetzenden String
Ja, stimmt.



Vielen Dank Chris and an alle anderen, die hier Zeit investiert haben!
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Batch & Shell
CMD Verschlüsslung ( Batch ) (11)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst älteste dateien via batch löschen (6)

Frage von cali169 zum Thema Batch & Shell ...

Batch & Shell
gelöst Suchen und Ersetzen mehrerer Suchbegriffe per Batch (4)

Frage von makroll10 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (17)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...