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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 299764
Url: https://administrator.de/contentid/299764
Ausgedruckt am: 22.11.2024 um 01:11 Uhr
21 Kommentare
Neuester Kommentar
Hallo Thomas,
kein Problem:
Alle verfügbaren CMDLets des Remotedesktop Moduls findest du hier:
Remote Desktop Cmdlets in Windows PowerShell
Grüße Uwe
kein Problem:
Import-Module RemoteDesktop
Get-RDUserSession | ?{$_.Username -eq 'max.mustermann'} | Invoke-RDUserLogoff -Force
Remote Desktop Cmdlets in Windows PowerShell
Grüße Uwe
Kann ich nicht bestätigen geht hier einwandfrei.
Das kann man nämlich bei Get-RDUserSession explizit mit Parametern angeben.
- 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.
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: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
Das sollte er auf jeden Fall fressen:
Get-RDUserSession | ?{$_.Username -eq 'max.mustermann'} | %{Invoke-RDUserLogoff -UnifiedSessionID $_.UnifiedSessionId -HostServer $_.HostServer -Force}
-edit- Korrektur
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!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.
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.
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.
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.
Get-RDUserSession | fl *
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
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
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
Na ja du musst ja auch das RDP Module wie ich ganz oben geschrieben habe vorher laden !!!! Ohne das gibts die RDP CMDLets nicht.
Und das geht schon mal gar nicht auf Rechnern die kein RSAT installiert haben!
Import-Module RemoteDesktop