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 !
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 !
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 73252
Url: https://administrator.de/contentid/73252
Ausgedruckt am: 26.11.2024 um 02:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo ZacMcKracken!
Das Auslesen des Wertes per "reg query" kannst Du etwa so vornehmen:
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:
Grüße
bastla
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
Moin ZakMcKracken,
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
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"..*ggDu 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
Hallo ZakMcKracken!
Auch ohne eigenes Fenster käme ein VBScript aus, etwa
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 ).
Grüße
bastla
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 ).
Grüße
bastla