Windows 2012 R2 RDP-Server - Skript bei Disconnect und Reconnect
Hallo!
Ich habe gerade zwei Anforderungen, bei denen ich einfach nicht weiterkomme...
Im Einsatz sind diverse Windows 2012 R2 Terminalserver. Was ich nun bräuchte sind zwei Funktionen:
1. Skript beim Disconnect
Findet ein Disconnect statt, soll ein Skript ausgeführt werden (keine Abmeldung, sondern Verbindungsunterbrechung oder ähnlich)
2. (noch wichtiger) Skript ausführen beim Reconnect
Wird der automatische Reconnect ausgeführt, soll auch hier ein Skript gestartet werden.
Habt ihr eine Idee, wie ich das umsetzen könnte?
Danke und Gruß
Phil
Ich habe gerade zwei Anforderungen, bei denen ich einfach nicht weiterkomme...
Im Einsatz sind diverse Windows 2012 R2 Terminalserver. Was ich nun bräuchte sind zwei Funktionen:
1. Skript beim Disconnect
Findet ein Disconnect statt, soll ein Skript ausgeführt werden (keine Abmeldung, sondern Verbindungsunterbrechung oder ähnlich)
2. (noch wichtiger) Skript ausführen beim Reconnect
Wird der automatische Reconnect ausgeführt, soll auch hier ein Skript gestartet werden.
Habt ihr eine Idee, wie ich das umsetzen könnte?
Danke und Gruß
Phil
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 295274
Url: https://administrator.de/contentid/295274
Ausgedruckt am: 22.11.2024 um 02:11 Uhr
4 Kommentare
Neuester Kommentar
Eventlogtrigger auf die jeweiligen Connect- und Disconnect Events ?
https://ithompson.wordpress.com/2009/12/01/tracking-rdp-logons/
fk
https://ithompson.wordpress.com/2009/12/01/tracking-rdp-logons/
fk
Hallo Phill,
ich würde es wie @126919 sagt über das Eventlog machen, leider ist der obige Link nicht mehr sehr aktuell und zeigt nicht die richtigen Eventlog-IDs.
Dazu gehst du wie folgt vor:
Computerkonfiguration > Richtlinien > Windows-Einstellungen > Sicherheitseinstellungen > Lokale Richtlinien > Überwachungsrichtlinie > "Anmeldeereignisse überwachen" > Erfolg
Oder alternativ ohne GPO über die lokale Sicherheitsrichtline per secpol.msc
Sicherheitseinstellungen > Lokale Richtlinien > Überwachungsrichtlinie > "Anmeldeereignisse überwachen" > Erfolg
Dann trägst du noch deine jeweiligen Scripte unter Aktion ein, fertig.
Alternativ dazu könntest du auch die vorhandenen Trigger im Task-Scheduler dazu benutzen:
Achtung dazu noch dieser Hinweis: Mit der Methode hatte ich aber in manchen Situationen/Konfigurationen das Problem, dass sie zweimal kurz hintereinander triggert, gerade wenn man sich wieder mit einer Session verbindet. Das konnte ich mit obigem Workaround über die Eventlog-IDs erfolgreich umgehen, deswegen bevorzuge ich die erste Methode.
Wie kann ich per Aufgabenplanung einen Wert an ein Script übergeben
Auf geblockte eingehende oder ausgehende Verbindungen der Windows Firewall mit der Aufgabenplanung reagieren
http://aymanstechblog.blogspot.de/2012/05/passing-event-details-as-argu ...
Kurzversion um die Tasks um die Variablen zu ergänzen:
Dazu erstellt man eine ps1-Datei mit folgendem Inhalt:
Alternativ für ältere Systeme (Server 2008R2) die das neue RemoteDesktop-Powershell-Modul nicht haben geht es auch mit folgendem Skript:
Und trägt dann im Task-Scheduler in den Task als Aktion folgendes ein:
Programm starten
Programm/Skript:
Argumente hinzufügen:
Viel Erfolg
Grüße Uwe
ich würde es wie @126919 sagt über das Eventlog machen, leider ist der obige Link nicht mehr sehr aktuell und zeigt nicht die richtigen Eventlog-IDs.
Dazu gehst du wie folgt vor:
1. Aktivieren des Auditings für Anmeldeereignisse auf dem Server an dem sich die User anmelden
Dazu setzt man entweder per GPO die Überwachungsrichtlinie für Anmeldeereignisse:Computerkonfiguration > Richtlinien > Windows-Einstellungen > Sicherheitseinstellungen > Lokale Richtlinien > Überwachungsrichtlinie > "Anmeldeereignisse überwachen" > Erfolg
Oder alternativ ohne GPO über die lokale Sicherheitsrichtline per secpol.msc
Sicherheitseinstellungen > Lokale Richtlinien > Überwachungsrichtlinie > "Anmeldeereignisse überwachen" > Erfolg
2. Anlegen der Eventlog-Trigger:
Dazu erstellst du jeweils einen Task für den Re- und den Disconnect und gibst unter Trigger einen neuen Ereignis-Trigger mit folgenden Eigenschaften an :Für den Re-Connect eines Users
Eventlog-ID: 4778Für den Disconnect eines Users
Eventlog-ID: 4779Dann trägst du noch deine jeweiligen Scripte unter Aktion ein, fertig.
Alternativ dazu könntest du auch die vorhandenen Trigger im Task-Scheduler dazu benutzen:
Achtung dazu noch dieser Hinweis: Mit der Methode hatte ich aber in manchen Situationen/Konfigurationen das Problem, dass sie zweimal kurz hintereinander triggert, gerade wenn man sich wieder mit einer Session verbindet. Das konnte ich mit obigem Workaround über die Eventlog-IDs erfolgreich umgehen, deswegen bevorzuge ich die erste Methode.
Zusätzliche Hinweise wenn man die Eigenschaften des Events an sein Skript weiterleiten möchte:
Man kann den jeweiligen User der sich angemeldet hat oder auch den Computer von dem aus sich dieser angemeldet hat aus dem Task an dein Script als Variable übergeben. Wie man dazu den Task anpassen muss habe ich in folgenden zwei Beiträgen schon mal beschrieben:Wie kann ich per Aufgabenplanung einen Wert an ein Script übergeben
Auf geblockte eingehende oder ausgehende Verbindungen der Windows Firewall mit der Aufgabenplanung reagieren
http://aymanstechblog.blogspot.de/2012/05/passing-event-details-as-argu ...
Kurzversion um die Tasks um die Variablen zu ergänzen:
- Task als XML exportieren
- XML-Datei öffnen und im Knoten EventTrigger folgendes XML-Schnippsel hinzufügen:
<ValueQueries>
<Value name="AccountName">Event/EventData/Data[@Name='AccountName']</Value>
<Value name="ClientName">Event/EventData/Data[@Name='ClientName']</Value>
<Value name="AccountDomain">Event/EventData/Data[@Name='AccountDomain']</Value>
<Value name="ClientAddress">Event/EventData/Data[@Name='ClientAddress']</Value>
<Value name="SessionName">Event/EventData/Data[@Name='SessionName']</Value>
<Value name="Logged">Event/System/TimeCreated/@SystemTime</Value>
</ValueQueries>
- Task dann wieder in den Taskplaner importieren
- Jetzt können die Variablen z.B. unter Argumente an dein PS Script übergeben werden indem man sie so schreibt $(AccountName)
Zur Veranschaulichung hier ein Beispiel für ein Powershell-Skript das diese Variablen benutzt um einen User nach dem Session-Disconnect direkt abzumelden:
Dazu erstellt man eine ps1-Datei mit folgendem Inhalt:
param([string]$username)
Import-Module RemoteDesktop
Get-RDUserSession | ?{$_.SessionState -eq 'STATE_DISCONNECTED' -and $_.Username -eq $username} | Invoke-RDUserLogoff -Force
param([string]$username)
rwinsta ([regex]::match((qwinsta),"(?i)\b$username\b\s*(\d+)").Groups[1].Value)
Programm starten
Programm/Skript:
powershell.exe
Argumente hinzufügen:
-File "C:\Pfad\zum\Script\ForceLogoffAfterDisconnect.ps1" "$(AccountName)"
Viel Erfolg
Grüße Uwe
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.