Powershell - Dateiüberwachung, bei ausbleibender Aktualisierung soll PC neu gestartet werden
Hallo zusammen,
in einem anderen Beitrag habe ich im Grunde genommen schon das gefunden, was ich suche:
Es soll eine dauerhafte Überwachung einer einzelnen Datei (aktuell.txt) stattfinden, welche minütlich aktualisiert wird. Sofern über einen Zeitraum von z.B. 120 Sekunden keine Aktualisierung registriert wurde, soll der PC neu gestartet werden.
Die Variablen des unter dem o. g. Beitrag aufgeführten Script habe ich entsprechend angepasst (siehe unten).
Allerdings wird der PC jedes Mal neu gestartet, obwohl eine Änderung der aktuell.txt stattgefunden hat. Habe ich irgendetwas übersehen?
Über eure Hilfe wäre ich sehr dankbar.
Viele Grüße
Steven
in einem anderen Beitrag habe ich im Grunde genommen schon das gefunden, was ich suche:
Es soll eine dauerhafte Überwachung einer einzelnen Datei (aktuell.txt) stattfinden, welche minütlich aktualisiert wird. Sofern über einen Zeitraum von z.B. 120 Sekunden keine Aktualisierung registriert wurde, soll der PC neu gestartet werden.
Die Variablen des unter dem o. g. Beitrag aufgeführten Script habe ich entsprechend angepasst (siehe unten).
# Datei deren Inhalt überwacht werden soll
$file = 'C:\Wswin\aktuell.txt'
# Max Zeit ohne Änderungen in Sekunden
$global:maxtime = 120
# ---------
# Zeit der letzten Änderung
$global:lastchange = get-date
# Eventuell existierenden Event subscriber löschen
Get-EventSubscriber FileChanged -EA SilentlyContinue | Unregister-Event -Force
# Filesystemwatcher erstellen
$fsw = New-Object IO.FileSystemWatcher (Split-Path $file -Parent), (Split-Path $file -Leaf) -Property @{IncludeSubdirectories = $false;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'}
# Filesystemwatcher registieren
Register-ObjectEvent $fsw Changed -SourceIdentifier FileChanged -Action {
# Pfad zur Datei
$fullpath = $Event.SourceEventArgs.FullPath
$global:lastchange = $Event.TimeGenerated
} | out-null
cls
write-host "Überwache Datei '$file' ..." -F Green
while($true){
if ((get-date) -gt $global:lastchange.AddSeconds($global:maxtime)){
write-host "Letzte Änderung an der Datei liegt länger als $global:maxtime Sekunden zurück." -F Yellow
# Tu hier was
# z.B. Prozess neu starten oder Rechner neu starten
Restart-Computer -Force
break
}
sleep 1
}
Allerdings wird der PC jedes Mal neu gestartet, obwohl eine Änderung der aktuell.txt stattgefunden hat. Habe ich irgendetwas übersehen?
Über eure Hilfe wäre ich sehr dankbar.
Viele Grüße
Steven
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 480382
Url: https://administrator.de/forum/powershell-dateiueberwachung-bei-ausbleibender-aktualisierung-soll-pc-neu-gestartet-werden-480382.html
Ausgedruckt am: 21.04.2025 um 16:04 Uhr
4 Kommentare
Neuester Kommentar

Der Filesystemwatcher feuert nur wenn das Handle die Änderungen auch flusht und nicht das File-Handle dauerhaft offen hat und das File nicht schließt, in dem Fall tritt kein Änderungsevent ein und es kommt zu dem Verhalten. In dem Fall wäre eine simple dauerhafte Schleife mit Änderungsdatum-Check sinnvoller, statt dem FS Watcher wenn dieser bei deiner Anwendung nicht feuert.
# Datei deren Inhalt überwacht werden soll
$file = 'C:\Wswin\aktuell.txt'
# Max Zeit ohne Änderungen in Sekunden
$maxtime = 120
# ---------
cls
write-host "Überwache Datei '$file' ..." -F Green
while($true){
if ((get-date) -gt (Get-Item $file).LastWriteTime.AddSeconds($maxtime)){
write-host "Letzte Änderung an der Datei liegt länger als $maxtime Sekunden zurück." -F Yellow
# Tu hier was
# z.B. Prozess neu starten oder Rechner neu starten
Restart-Computer -Force
break
}
sleep 5
}

Ich denke der FS Watcher im verlinkten Skript dient dazu Ressourcen und Pollings zu verringern, so muss die Schleife nicht bei jedem Durchgang eine Abfrage der Daten im Dateisystem machen und muss stattdessen nur die Variablen vergleichen. Denke das war die Intention. Das funktioniert auch gut solange eben eine Anwendung FS Watcher kompatibel arbeitet, in deinem speziellen Fall wohl offensichtlich nicht.
Ebenso schönen Abend.
Ebenso schönen Abend.