PowerShell – Event Steuerung

Es gibt Objekte, die als MemberType nicht nur Methoden oder Eigenschaften mitbringen, sondern auch Events. Was bedeutet das?

Sehen wir uns das am Beispiel eines Prozessobjektes an:

Hier gibt es ein Member mit dem Typ Event und dem Namen Exited. Was kann man damit nun anfangen? Starten Sie ein Word auf Ihrem PC. Im Anschluss laden Sie den Winword Prozess in eine Variable:

Nun können Sie eine Überwachung einrichten, indem Sie einen Job definieren, der beim Auftreten eines Events eine Aktion auslöst. Wenn zum Beispiel Word geschlossen wird, könnten Sie dadurch das Starten von Excel auslösen.

Wenn Sie nun Word beenden, wird automatisch Excel gestartet. Über die Sinnhaftigkeit lässt sich bei diesem Beispiel sicher streiten.

Sie könnten auch eine Art Scheduler einrichten, der permanent eine Abfrage durchführt, ob ein Prozess (in diesem Falle Winword) gestartet ist. Eine solche Steuerung macht aber sicher mehr Sinn, wenn sie entsprechend Event getriggert ist. Ansonsten müsste der Scheduler ständig laufen und würde Rechnerleistung benötigen.

Diese Form bietet natürlich noch viele weitere Einsatzmöglichkeiten. Bauen wir uns doch mit dieser Methode mal einen Countdown, der nach Ablauf “etwas” auslöst.

Zunächst erstellen wir ein neues Timer Objekt:

Wie Sie sehen, gibt es auch hier wieder die Member vom Typ Event. Wir verwenden das Event Elapsed. Dieses Event tritt auf, wenn die Zeit abgelaufen ist.

Nun richten wir wieder einen Job zur Überwachung des Events ein. Den Countdown setzen wir auf 5 Sekunden und starten ihn mit $Countdown.Enabled=$True 

Alle 5 Sekunden wird nun “Countdown abgelaufen!” angezeigt. Ausschalten können Sie diese Anzeige wieder mit $Countdown.Enabled=$False


Bei aller Spielerei nun noch ein brauchbares Beispiel zur Überwachung eines Verzeichnisses.

Sie möchten das Verzeichnis c:\work auf Veränderungen überwachen. Wenn Dateien darin abgelegt werden oder Unterverzeichnisse darin erstellt werden, hätten Sie gerne eine Benachrichtigung per Mail. Eine solche Überwachung lässt sich genau mit dieser Event Funktion realisieren. Zunächst erstellen wir wieder ein entsprechendes Objekt:

Die in dem Objekt enthaltenen Events sehen Sie hier:

Wir brauchen nun noch die Variable mit dem Scriptcode zum Versenden einer Mail:

Den $Mailuser habe ich natürlich vorher mit $Mailuser = Get-Credentials eingelesen.

Zum Abschluss dann noch die Events als Jobs registrieren und das war’s:

Wenn Sie nun eine Datei ablegen, neu erstellen oder was auch immer in diesem Verzeichnis bearbeiten, erhalten Sie (natürlich nur, wenn das SMTP technisch alles passt) eine Benachrichtigung per Mail.

Wenn Sie diese Überwachung wieder abschalten möchten, lassen Sie sich über Get-Job die entsprechenden Jobs geben und löschen Sie diese mit Remove-Job -force