thomasreischer
Goto Top

CMD oder Powershell command um alle RDP-Sitzungen eines Users am Terminalserver abzumelden

Hallo zusammen,

ich bräuchte ein Script, das alle Sitzungen eines bestimmten Users abmeldet. Angenommen der Max.Mustermann hat 4 RDP Sitzungen am Terminalserver offen -> das Script sollte alle 4 abmelden.

Ich steh grad völlig auf dem Schlauch - kann mir da einer von euch helfen?

Grüße,
Thomas

Content-ID: 299764

Url: https://administrator.de/contentid/299764

Ausgedruckt am: 22.11.2024 um 01:11 Uhr

colinardo
colinardo 22.03.2016 aktualisiert um 12:32:50 Uhr
Goto Top
Hallo Thomas,
kein Problem:
Import-Module RemoteDesktop
Get-RDUserSession | ?{$_.Username -eq 'max.mustermann'} | Invoke-RDUserLogoff -Force  
Alle verfügbaren CMDLets des Remotedesktop Moduls findest du hier:
Remote Desktop Cmdlets in Windows PowerShell

Grüße Uwe
thomasreischer
thomasreischer 22.03.2016 um 12:33:18 Uhr
Goto Top
Hi Uwe,

super, danke dir! face-smile

Grüße,
Thomas
thomasreischer
thomasreischer 22.03.2016 um 12:37:24 Uhr
Goto Top
zu früh gefreut - das Script beendet leider nur eine offene Session :/
colinardo
colinardo 22.03.2016 aktualisiert um 12:49:30 Uhr
Goto Top
Zitat von @thomasreischer:

zu früh gefreut - das Script beendet leider nur eine offene Session :/
Kann ich nicht bestätigen geht hier einwandfrei.

  • Was gibt denn ein Get-RDUserSession aus, sind dort überhaupt alle Sessions gelistet ?
  • Und sind die Sessions alle auf einem Terminalserver oder auf mehrere SessionHosts verteilt ?

Das kann man nämlich bei Get-RDUserSession explizit mit Parametern angeben.
thomasreischer
thomasreischer 22.03.2016 aktualisiert um 12:50:33 Uhr
Goto Top
Alle Sitzungen sind auf demselben Host.

Get-RDUserSession gibt ganz normal alle Sitzungen aus - auf demselben Host, mit denselben Usernames, allerdings natürlich mit unterschiedlichen ID's. Um jetzt von Max.Mustermann alle 4 Sitzungen zu beenden, muss ich Get-RDUserSession | ?{$_.Username -eq 'max.mustermann'} | Invoke-RDUserLogoff -Force 4 mal ausführen.

Bei uns läuft übrigens Windows Server 2012 - leider nicht R2
colinardo
Lösung colinardo 22.03.2016 aktualisiert um 12:57:20 Uhr
Goto Top
Zitat von @thomasreischer:

Alle Sitzungen sind auf demselben Host.

Get-RDUserSession gibt ganz normal alle Sitzungen aus - auf demselben Host, mit denselben Usernames, allerdings natürlich mit unterschiedlichen ID's. Um jetzt von Max.Mustermann alle 4 Sitzungen zu beenden, muss ich Get-RDUserSession | ?{$_.Username -eq 'max.mustermann'} | Invoke-RDUserLogoff -Force 4 mal ausführen.

Bei uns läuft übrigens Windows Server 2012 - leider nicht R2
Sehr seltsam, eventuell ein Timing-Problem, denn das ist eine simple Pipe die alle Objekte abarbeiten sollte!, aber es gibt natürlich immer mehrere Wege zum Ziel:
Das sollte er auf jeden Fall fressen:
Get-RDUserSession | ?{$_.Username -eq 'max.mustermann'} | %{Invoke-RDUserLogoff -UnifiedSessionID $_.UnifiedSessionId -HostServer $_.HostServer -Force}  

-edit- Korrektur
thomasreischer
thomasreischer 22.03.2016 um 12:57:27 Uhr
Goto Top
Das hat er auch gefressen! face-smile

Brave powershell...

Danke dir!
thomasreischer
thomasreischer 23.03.2016 um 07:50:55 Uhr
Goto Top
Wir hatten einen User, der 6 Sessions offen hatte. Durch das Script wurden komischerweise nur 4 beendet. Ich musste es dann erneut ausführen um auch die restlichen 2 abzumelden.
colinardo
colinardo 23.03.2016 aktualisiert um 08:02:07 Uhr
Goto Top
Zitat von @thomasreischer:

Wir hatten einen User, der 6 Sessions offen hatte. Durch das Script wurden komischerweise nur 4 beendet. Ich musste es dann erneut ausführen um auch die restlichen 2 abzumelden.
Da stimmt definitiv was bei euch am Terminal nicht. Im Test gestern nochmal auf einem alten 2012er wurden in jedem Fall alle Sessions beendet mit beiden Varianten!
Ich hatte sogar zum Test in zwei Sessions eine Anwendung zum Absturz (hängen) gebracht um zu sehen ob es eventuell dran liegen könnte, die Sessions ließen sich jedoch in jedem Fall alle zuverlässig beenden. Sorry das ist definitiv kein normales Verhalten bei euch.
thomasreischer
thomasreischer 23.03.2016 um 08:14:10 Uhr
Goto Top
Hmm, was soll denn da nicht stimmen..?
colinardo
colinardo 23.03.2016 aktualisiert um 08:21:04 Uhr
Goto Top
Zitat von @thomasreischer:

Hmm, was soll denn da nicht stimmen..?
Ich würde mal ein Update der Powershell fahren.
Und mal die Details (Stati) der Sessions anzeigen lassen (angemeldet, disconnected), obwohl das hier keinen Einfluss auf das Beenden darauf hatte.

Für eine Diagnose sind das aber leider zu wenig Infos zum System.
thomasreischer
thomasreischer 23.03.2016 um 08:55:09 Uhr
Goto Top
Könntest du mir bitte die entsprechenden Commands dafür geben? Ich habe leider kaum Erfahrung mit powershell..
colinardo
colinardo 23.03.2016 aktualisiert um 09:02:47 Uhr
Goto Top
Get-RDUserSession | fl *
Zeit dir alle Eigenschaften der Sessions.

Zur Info: Das erste Konstrukt natürlich in leicht abgewandelter Form aber selber Struktur läuft bei einem Kunden in einer Farm mit einigen hundert Session Hosts bisher in einem Skript absolut fehlerfrei, egal auf welchem Sessionhost sich die User befinden.

Gesendet aus dem Flieger über zentral Frankreich face-wink
thomasreischer
thomasreischer 23.03.2016 aktualisiert um 09:10:11 Uhr
Goto Top
Hmm, Get-RDUserSession | fl * ist bei mir keine Funnktion.. Powershell scheint wohl tatsächlich nicht auf dem neuesten Stand zu sein.. Gibt es einen Command zum Updaten oder muss ich mir da ne .exe ziehen?

Dazu muss ich sagen: bei uns läuft nur Windows Server 2012 leider nicht R2

Gesendet aus meiner Kammer in der Arbeit |:
colinardo
colinardo 23.03.2016 aktualisiert um 09:47:19 Uhr
Goto Top
fl ist ein Alias für format-list, kannst du also stattdessen verwenden, das muss gehen ansonsten hat deine Powershell wirklich einen Knacks oder du hast das L als i oder 1 interpretiert. Reboot tut oftmals gut face-smile
Gibt es einen Command zum Updaten oder muss ich mir da ne .exe ziehen?
https://www.microsoft.com/de-de/download/details.aspx?id=40855
thomasreischer
thomasreischer 23.03.2016 um 09:47:00 Uhr
Goto Top
Klappt weder an meinen Windows 10 enterprise Rechnern noch am Server.

Werde es dann nach einem Neustart heute Abend versuchen.
colinardo
colinardo 23.03.2016 aktualisiert um 09:52:35 Uhr
Goto Top
Zitat von @thomasreischer:
Klappt weder an meinen Windows 10 enterprise Rechnern noch am Server.
Na ja du musst ja auch das RDP Module wie ich ganz oben geschrieben habe vorher laden !!!! Ohne das gibts die RDP CMDLets nicht.
Import-Module RemoteDesktop 
Und das geht schon mal gar nicht auf Rechnern die kein RSAT installiert haben!
thomasreischer
thomasreischer 23.03.2016 um 09:49:49 Uhr
Goto Top
In dem Moment bin ich auch drauf gekommen.. Sorry, mein Fehler - jetzt klappt der command
thomasreischer
thomasreischer 23.03.2016 um 09:53:20 Uhr
Goto Top
Ich schätze mal dass das Script auch mit State-Disconnected keine Probleme haben sollte, oder?
colinardo
colinardo 23.03.2016 aktualisiert um 09:55:08 Uhr
Goto Top
So, die vollbusige Stewardess wird mir jetzt gleich meinen Lappi zu- und meinen Sitz hochklappen, wir setzen zur Landung an face-smile

Bis später ...
thomasreischer
thomasreischer 23.03.2016 um 10:03:42 Uhr
Goto Top
( ͡☉ ͜ʖ ͡☉)

Wünsche eine angenehme Landung..