Ordner überwachen mit filesystemwatcher PowerShell

Grundlegendes

Ordner überwachen, mit filesystemwatcher powershell, kann oft sehr hilfreich sein, um direkt Änderungen nachvollziehen zu können. So möchte man z. B. bestimmte Ordner oder eine bestimmte Netzwerkfreigabe auf Änderungen überwachen.

Die Windows PowerShell bietet hierzu ein sehr interessantes Objekt mit dem Namen FileSystemWatcher an.

Hierzu lässt sich ein kleines Script implementieren, welches ständig einen Ordner auf Veränderungen beobachtet und mitprotokolliert, was gerade in diesem Ordner vor sich geht. Somit könnte man direkt auch live verfolgen, welche Daten dort gerade erzeugt, gelöscht oder verändert wurden.

Funktionsweise von filesystemwatcher PowerShell

Zunächst ist es im Script wichtig, dass der zu überwachende Ordner auch existiert. Anschließend wird aus der Klasse daraus ein neues Objekt generiert, welches für die Überwachung des Ordners zuständig ist.

Das Script beinhaltet eine While – Schleife, welche hier als Endlosschleife fungiert.


Deswegen wird noch zusätzlich der Kommentar eingefügt, wie das Endlosscript abgebrochen werden kann. Mit der Methode „WaitForChanged“ wird nun das Verzeichnis auf Veränderungen geprüft.

Die komplette Beschreibung der Klasse bzw. des Objekts und dessen Methoden kann direkt auf der Microsoft Seite nachgelesen werden. Das komplette basiert natürlich auf dem Dot.Net Framework.

#######################################
# .SYNOPSIS
# Das Verzeichnis muss natürlich existieren.
# Über die mit while erstellte Endloschleife wird geprüft, ob es Änderungen am Verzeichnis gab.

# .DESCRIPTION
# Verzeichnis überwachen mithilfe einer Endlos-Schleife.

# .PARAMETER
# $folder, $timeout, $FileSystemWatcher

# .NOTES
# Author:Markus Elsberger
# Web:https://www.it-learner.de

## Code ##

# Variable definieren
$folder = ‚P:Obsidian‘
$timeout = 10

$FileSystemWatcher = New-Object System.IO.FileSystemWatcher $folder

# Manueller Abbruch der Schleife
Write-Host „Mit CTRL+C kann das Monitoring abgebrochen werden.“

while ($true) {
$result = $FileSystemWatcher.WaitForChanged(‚all‘, $timeout)
if ($result.TimedOut -eq $false)
{
# Aenderungen am Verzeichnis werden ausgegeben!
Write-Warning (‚File {0} : {1}‘ -f $result.ChangeType, $result.name)
}

}

Write-Host „Monitoring abgebrochen.“
 Ordner überwachen mit filesystemwatcher powershell
Ordner überwachen mit filesystemwatcher powershell

Keine Produkte gefunden.

Fazit zum filesystemwatcher powershell

Damit ein Skript überhaupt ausgeführt werden darf, müssen natürlich noch die richtigen Richtlinien gesetzt werden. Das heißt, es müssen die ExecutionPolicy in der PowerShell gesetzt werden. Des Weiteren könnte man sich zur Sicherheit auch überlegen, ob man das Skript signiert. Hier erhöht man die Sicherheit enorm.

Das Cmdlet filesystemwatcher powershell ist auf alle Fälle ein toller Helfer, wenn man nur mal ein Verzeichnis auf Veränderung überwachen möchte. Natürlich könnte man noch viele Erweiterungen implementieren.

So wäre es z. B. sinnvoll, die Dateien zu zählen, oder bei einer bestimmten Aktion eine E-Mail zu versenden. Ich denke, der Kreativität und möglichen Anwendung sind hier kaum Grenzen gesetzt.

Das könnte dich auch interessieren:

Der Blogbetreiber und Autor: Markus Elsberger

Über den Autor

Mein Name ist Markus Elsberger und ich beschäftige mich mit der Administration von Windows und Linux-Systemen sowie mit diversen Themen bzgl. Netzwerktechnik. In meiner Lehrtätigkeit erstelle ich verschiedene Szenarien und teste auch verschiedene Konfigurationen, welche ich in diesem Blog festhalten möchte. -> Gern kannst du mich mit einem Kaffee unterstützen!


Kostenlose Befehlsreferenzen und E-Books
(Netzwerkanalyse, Benutzerverwaltung, Festplattenkonfiguration, u. v. m.)


2 Gedanken zu „Ordner überwachen mit filesystemwatcher PowerShell“

  1. Vielen Dank für die Anregung. Habe ein paar kleine Änderungen am Skript vorgenommen, jetzt läuft es. Du kannst es gerne so übernehmen.

    Fragen:

    Das Skript gibt bei Unterverzeichnissen nur den Ordner aus, in dem die Änderungen stattfinden. Wie kann ich den Pfad und Dateinamen ausgeben?

    #######################################
    # .SYNOPSIS
    # Das Verzeichnis muss natürlich existieren.
    # Über die mit while erstellte Endloschleife wird geprüft, ob es Änderungen am Verzeichnis gab.

    # .DESCRIPTION
    # Verzeichnis überwachen mithilfe einer Endlos-Schleife.

    # .PARAMETER
    # $folder, $timeout, $FileSystemWatcher

    # .NOTES
    # Author:Markus Elsberger
    # Web:https://www.it-learner.de

    ## Code ##

    # Variable definieren
    $folder = ‚P:\Obsidian‘
    $timeout = 10

    $FileSystemWatcher = New-Object System.IO.FileSystemWatcher $folder

    # Manueller Abbruch der Schleife
    Write-Host „Mit CTRL+C kann das Monitoring abgebrochen werden.“

    while ($true) {
    $result = $FileSystemWatcher.WaitForChanged(‚all‘, $timeout)
    if ($result.TimedOut -eq $false)
    {
    # Aenderungen am Verzeichnis werden ausgegeben!
    Write-Warning (‚File {0} : {1}‘ -f $result.ChangeType, $result.name)
    }

    }

    Write-Host „Monitoring abgebrochen.“

  2. Hallo Uwe,
    danke für deine Anpassungen. Wenn du den Inhalt haben möchtest, so könntest du innerhalb der if-Bedingung mit Get-Childitem -path $folder den Inhalt ausgeben lassen.

    Viele Grüße
    Markus

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Kostenlose E-Books für die IT-Administration

Steigere deine IT-Kompetenzen

Ebook - 10 Schritte nach der Windows Installation
Close the CTA

Windows 11, Windows Server, Docker, PowerShell Referenzen, Batch, Linux Terminal, 

u.v.m.