Mit der PowerShell Ordner überwachen

Mit der PowerShell Ordner auf Veränderungen überwachen

Grundlegendes

Mit der PowerShell Ordner überwachen, kann oft sehr hilfreich sein, um direkt Änderungen nachvollziehen zu können. So möchte man z. B. bestimmten 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.

Script zum PowerShell Ordner überwachen

Zunächst im Script ist es 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 können 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.“
Mit Der Windows PowerShell Einen Ordner überwachen
Mit Der Windows PowerShell Einen Ordner überwachen

Fazit

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.

Dieses kleine Skript 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 implementiert.

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.

2cb1714c2f884290aeb0b41a20573444

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.


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


2 Kommentare zu „Mit der PowerShell Ordner auf Veränderungen überwachen“

  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

Ebook - 10 Schritte nach der Windows Installation

Kostenlose Befehlsreferenzen und

E-Books

FREE

Netzwerkanalyse, Benutzerverwaltung, Festplattenkonfiguration, u. v. m.