zacmckracken
Goto Top

bestimmten Reg-Key überwachen und bei Änderung script starten

hallo,
hab schon mit "reg query" rumexperimentiert, komme aber leider nicht zum ziel

ich moechte einen bestimmten REG_DWORD-wert ueberwachen und bei aenderung dieses wertes automatisch ein script/batch starten
(die batch zum neu schreiben des wertes habe ich bereits erstellt, funktioniert auch, es geht also "nur" noch um die ueberwachung)

ist das irgendwie realisierbar ?

TIA !

Content-Key: 73252

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

Printed on: April 19, 2024 at 05:04 o'clock

Member: bastla
bastla Nov 11, 2007 at 13:19:11 (UTC)
Goto Top
Hallo ZacMcKracken!

Das Auslesen des Wertes per "reg query" kannst Du etwa so vornehmen:
@echo off & setlocal
for /f "skip=3 tokens=3" %%v in ('reg query "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor" /v "PathCompletionChar"') do set "Value=%%v"  
echo Wert derzeit: %Value%
if "%Value%" neq "0x0" echo Wert geaendert  

Starten könntest Du die Überprüfung per "Geplantem Task", oder Du lässt einen Batch dauernd in einer Schleife laufen, wobei die Wartezeit bis zur nächsten Überprüfung mit "sleep.exe" aus den "Windows Server 2003 Resource Kit Tools" oder mit einem "ping" festgelegt werden kann - Beispiel für etwa 300 Sekunden Pause:
@echo off & setlocal
:Loop
for /f "skip=3 tokens=3" %%v in ('reg query "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor" /v "PathCompletionChar"') do set "Value=%%v"  
if "%Value%"=="0x0" goto :OK  
echo Wert geaendert
echo Starte Script
...
...
:OK
ping -n 300 127.0.0.1 >nul
goto :Loop

Grüße
bastla
Member: ZacMcKracken
ZacMcKracken Nov 12, 2007 at 05:18:34 (UTC)
Goto Top
danke danke face-smile
so gehts, gerade erfolgreich gestestet !
mir war die syntax von "reg query" bisher nicht ganz klar, auch das arbeiten mit variablen in batchfiles ist etwas in vergessenheit geraten (ist schon 'ne weile her das arbeiten mit DOS face-wink

anzumerken ist noch, dass das bei aenderung des keys auszufuehrende script (in meinem fall 'ne batch) mit "call xxx.bat" aufzurufen ist, sonst beendet sich das erste script beim verzweigen.

das einzige, was etwas "amateurhaft" wirkt, ist dass nun staendig ein dosfenster mit der batch rennt - gibts kein tool, dass einen regkey ueberwachen kann ausser "reg query" ?

aber besser so als garnicht !

gruesse,
Zac
Member: Biber
Biber Nov 12, 2007 at 07:19:48 (UTC)
Goto Top
Moin ZakMcKracken,

anzumerken ist noch, dass das bei aenderung des keys auszufuehrende script (in meinem fall 'ne batch) mit "call xxx.bat" aufzurufen ist, sonst beendet sich das erste script beim verzweigen.
Jein... Du kannst auch statt einer separaten Batch-Datei deine zweizeilige Subroutine im vorhandenen Batch aufrufen (mit call :subroutine", Beispiele in Batch & Shell).

das einzige, was etwas "amateurhaft" wirkt, ist dass nun staendig ein dosfenster mit der batch rennt
Endlich mal einer, der "das einzige" schreibt und nicht "das einzigste"..*gg
Du kannst den Batch auch OHNE Fenster laufen lassen. Beispiele für "Batch im Hintergrund" oder "Batch minimiert" sollte ebenfalls die Forumssuchfunktion liefern.

Grüße
Biber
Member: bastla
bastla Nov 12, 2007 at 08:47:39 (UTC)
Goto Top
Hallo ZakMcKracken!

Auch ohne eigenes Fenster käme ein VBScript aus, etwa
Const sKey = "HKCU\SOFTWARE\Microsoft\Command Processor\PathCompletionChar"  
Const lVergleich = &H0
Const sCommand = "D:\Batch.cmd"  
Const lPause = 300000 '300 Sekunden  

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

Do
	Value = WshShell.RegRead(sKey)
	If Value <> lVergleich Then WshShell.Run sCommand
	WScript.Sleep lPause
Loop

Wenn Du nach dem "sCommand" noch ein ",0" setzt, wird auch kein CMD-Fenster für den aufgerufenen Batch angezeigt (zum Testen aber nicht zu empfehlen face-wink).

Grüße
bastla