Wer ein Netzwerk administriert sollte wissen, wer sich mit Admin-Rechten auf den Geräten tummelt. Wir konfigurieren eine E-Mail Benachrichtigung, die jedesmal anschlägt, wenn sich ein Benutzer mit Admin-Rechten einloggt. Im ersten Schritt kümmern wir uns um normale Logins, im zweiten um Reconnects per RDP.

Normale Logins sind einfach. Wir benötigen lediglich eine neue Aufgabe im Aufgabenplaner. Diese wird ausgeführt, wann immer sich ein Benutzer an diesem Server anmeldet - lokal oder per Remote Desktop - und ruft dann ein Powershell Skript auf. Erstellen wir zunächst das Powershell Skript C:\line5\scripts\login.benachrichtigung.ps1:

Send-MailMessage -From 'info@example.org' -To 'info@example.org' -Body 'Attention, Login by Administrator!' -Subject 'Admin-Login on Server xxx'  -SmtpServer 'smtp.example.org' -Port 587 -Credential $(New-Object System.Management.Automation.PSCredential ('smtp_username', $(ConvertTo-SecureString 'smtp_password' -AsPlainText -Force))) –UseSsl

Es besteht nur aus einer Zeile. Die E-Mail Adressen sowie die SMTP Zugangsdaten müssen natürlich ersetzt werden. Bei Ausführen des Skriptes sollte zu diesem Zeitpunkt bereits eine E-Mail ankommen. Falls nicht, ist etwas schief gelaufen.

Eine neue Aufgabe in der Aufgabenplanung ruft dieses Skript auf. Das wichtigste bei der neuen Aufgabenplanung ist der Trigger, der auf Bei Anmeldung eines Benutzers gestellt sein muss.

Aufgabenplanung

Als “Aktion” wird in das Feld Programm/Skript erhält der Wert powershell eingetragen; das Feld Argumente hinzufügen benötigt den Pfad des soeben erstellten Skriptes:

-ExecutionPolicy Bypass -NonInteractive -WindowStyle Hidden c:\line5\scripts\login.benachrichtigung.ps1

Aufgabenplanung - Aktion

… und das war es dann auch schon mit dem ersten Teil. Wann immer sich jemand am Server einloggt, wird eine E-Mail versendet.

Was wollen wir also mehr?

Es gibt noch ein Schlupfloch: Falls sich jemand per Remote Desktop verbindet und danach nicht ausloggt (wer loggt sich schon aus…), wird beim erneuten Verbinden keine Warnmeldung versendet. Das ist ein potenzielles Sicherheitsrisiko.

Wir richten daher kurzerhand einen weiteren Task ein - diesmal aber nicht über die Aufgabenplanung, sondern über die Ereignisanzeige. Und weil wir hier den Benutzernamen abfangen können, erstellen wir zunächst ein zweites Skript c:\line5\scripts\reconnect.benachrichtigung.ps1:

$me = Get-WinEvent -LogName Microsoft-Windows-TerminalServices-LocalSessionManager/Operational | Where {$_.Id -eq "25"}| select -ExpandProperty Message -First 1
Send-MailMessage -From 'info@example.org' -To 'info@example.org' -Body "Reconnect mit Server durch Benutzer: $me " -Subject 'Reconnect event on Server' -SmtpServer 'smtp.example.org' -Port 587 -Credential $(New-Object System.Management.Automation.PSCredential ('smtp_username', $(ConvertTo-SecureString 'smtp_password' -AsPlainText -Force))) –UseSsl

Auch bei diesem Skript ist es vorteilhaft, E-Mail Adressen und SMTP Zugangsdaten zu ändern. ;-)

In der Ereignisanzeige suchen wir dann ein Event mit der Ereignis-ID 25 im Ordner Anwendungs- und Dienstprotokolle > Microsoft > Windows > TerminalServices-LocalSessionManager > Operational. Ein Klick mit der rechten Maustaste auf ein solches Event bringt den Kontextmenüpunkt Aufgabe an dieses Ereignis anfügen… zum Vorschein, der uns wiederum mit einem Assistenten versorgt.

Wichtig ist hier eigentlich nur die Aktion, bei der wir das Feld Programm/Skript wiederum mit powershell füllen und unseren Skriptnamen in das Argumente hinzufügen (optional) Feld eintragen:

-ExecutionPolicy Bypass -NonInteractive -WindowStyle Hidden F:\line5\scripts\reconnect.benachrichtigung.ps1

Jetzt schnell das RDP Fenster schließen und neu einloggen - kommt eine E-Mail an?

Die Skripte befinden sich hier als gist: https://gist.github.com/l5/7c23ede6972f0bd7110943dfc9271806