Maxim_Kazmin - Fotolia

PowerShell-Skript zur erzwungenen Abmeldung von RDP-Nutzern

Wenn sich RDP-Nutzer nicht abmelden, werden wertvolle Serverressourcen belegt. Mit diesem PowerShell-Skript kann die Abmeldung erzwungen werden.

Das Problem ist nicht gerade neu: Ein Endanwender loggt sich über das Remote Desktop Protocol (RDP) in einen Windows Server ein und vergisst dann später, sich abzumelden. Offene Sitzungen verbrauchen aber auf dem Server unnötig Ressourcen. Mit einem kleinen PowerShell-Skript kann die Abmeldung von Nutzern aber erzwungen werden, um diese Ressourcen freizugeben.

Um eine erzwungene Abmeldung einer Sitzung über das Remote Desktop Protocol durchzuführen, muss ein Admin zunächst sämtliche Dienste der Remote Desktop Services (RDS) auf dem Server und deren Status abfragen. Nachdem alle getrennten Dienste erkannt worden sind, folgt als nächstes der Abmeldeprozess.

Im ersten Schritt muss hierfür das kostenlose PowerShell-Modul PSTTerminalServices heruntergeladen und dessen Verfügbarkeit in der PowerShell sichergestellt werden. Die nötigen Installationshinweise hierfür sind auf der Downloadseite erhältlich.

Im ersten Schritt sollen nun zunächst alle aktiven Sitzungen auf einem Lab-Server mit dem Namen HYPERV abgefragt werden (Abbildung 1).

Abbildung 1: Aktive Sitzungen mit Get-TSSession abfragen.

Momentan sind nur wenige Sitzungen inaktiv und angezeigt werden alle, obwohl für dieses Beispiel ja lediglich die getrennten Sitzungen interessant sind. Über den Parameter State lassen sich diese herausfiltern (Abbildung 2).

Abbildung 2: Inaktive Sitzungen mit State Disconnected herausfiltern.

Dieses Ergebnis ist zwar schon hilfreicher, aber es gibt noch immer ein Problem: Sitzung 0 ist keine RDP-Sitzung, und es gibt auch keine Möglichkeit, diese mittels Get-TSSession aus den Ergebnissen auszuschließen. Die Lösung des Problems besteht in der Verwendung eines where-Filters, der auch diese Sitzung entfernen kann (Abbildung 3).

Abbildung 3: Über den where-Filter wird die Ergebnisliste weiter gefiltert.

An diesem Punkt erhält man also alle Sitzungen, die problemlos beendet werden können. Als nächstes muss also diese inaktive Sitzung noch geschlossen werden. Dafür bietet das Modul PSTerminalServices das hilfreiche Cmdlet Stop-TSSession (Abbildung 4).

Abbildung 4: Über Stop-TSSession wird die inaktive Sitzung geschlossen.

Das Cmdlet Stop-TSSession meldet eine Sitzung zwangsweise ab. Dadurch könnten Endanwender Teile ihrer Arbeit verlieren, weshalb eine Rückfrage an den Administrator erfolgt. An dieser Stelle könnte man natürlich die Abfrage einfach mit A bestätigen und den Dingen ihren Lauf lassen.

Allerdings mögen es Administratoren nicht sonderlich, in einem eigentlich fortlaufenden Prozess manuell Tasten betätigen zu müssen. Wird dieses Cmdlet beispielsweise in ein längeres Skript eingefügt, dann wird die Rückfrage das Skript natürlich unterbrechen. Daher ist es möglich, die Bestätigungsanfrage zu entfernen.

Das Cmdlet Stop-TSSession verfügt über den gängigen PowerShell-Parameter -Force, der Administratoren das Durchlaufen der Vorgänge ohne manuellen Eingriff erlaubt. Das finale Skript sieht dann wie folgt aus:

Get-TSSession -ComputerName HYPERV -State Disconnected | where {$_.SessionID -ne 0} | Stop-TSSession –Force

Wenn auf diesen Befehl keine Ausgabe erfolgt, dann wurde die Sitzung erfolgreich abgemeldet.

Folgen Sie SearchDataCenter.de auch auf Twitter, Google+ und Facebook!

Erfahren Sie mehr über Serverbetriebssysteme

ComputerWeekly.de
Close