smilodex
Goto Top

Script um bestimmte (getrennte) User von diversen Servern eines Serververbundes abzumelden

Hallo zusammen,


ich bin leider relativ neu in der IT (mach gerade meine Ausbildung und leider lernen wir in der Schule kein Power-Shell...) und bräuchte deswegen Unterstützung bei der Erstellung eines (Power-Shell-Skriptes).

Ich habe folgendes Problem.

Ich bräuchte ein Script mit dem ich gezielt mehrere oder alle getrennten User von allen (oder manchmal von bestimmten Servern) abmelden kann.


Ich möchte eine maschines.txt-Datei in welche ich alle relevanten Server reinschreibe auf denen das Script ausgeführt werden soll

Und eine users.txt-Datei in welcher ich entweder mehrere User oder den "Befehl für alle getrennten user" reinschreiben kann.


Meine ReadMe sähe dann quasi so aus:

  • Dieser Ordner (mit dem Script und machines.txt, user.txt) muss unter folgendem Pfad abgelegt werden:
C:\Admin\Batch\logoff_users

  • .txt-Listen überprüfen und ggf. anpassen:
machines.txt = Servernamen
user.txt = Benutzernamen

  • PowerShell als Domänenadministrator starten

  • Skript in das PowerShell-Fenster kopieren und ausführen
Dienste werden auf jedem Server beendet, es wird 5 Sek. gewartet und die Dienste werden wieder gestartet

Content-Key: 566160

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

Printed on: May 13, 2024 at 14:05 o'clock

Mitglied: 142583
142583 Apr 20, 2020 at 10:49:26 (UTC)
Goto Top
Abmelden? Verwaiste Remotedesktopverbindungen?
Mitglied: 143728
143728 Apr 20, 2020, updated at Apr 22, 2020 at 10:54:21 (UTC)
Goto Top
$machines = gc 'c:\Admin\Batch\logoff_users\machines.txt'  
$users = gc 'c:\Admin\Batch\logoff_users\users.txt'  
Import-Module RemoteDesktop
Get-RDServer | ?{$_.Server -in $machines} | Get-RDUserSession | ?{$_.Username -in $users -and $_.SessionState -eq 'STATE_DISCONNECTED'} | Invoke-RDUserLogoff -Force -verbose  
Member: Smilodex
Smilodex Apr 20, 2020, updated at Apr 22, 2020 at 10:08:15 (UTC)
Goto Top
Danke für die schnelle Antwort.

Was würdest du als alternative zu PS vorschlagen/empfehlen?


Muss ich ich in machines.txt noch so sachen wie OU=ABS XY,DC=ABS2007,DC=local oder so eintragen oder reicht es wenn ich einfach da nur die Servernamen ts01 ts02 etc untereinander reinschreibe? Oder erkennt das script das dann automatisch wenn ich das vom admin-server starte?
Mitglied: 143728
143728 Apr 20, 2020 updated at 13:18:35 (UTC)
Goto Top
Zitat von @Smilodex:

Danke für die schnelle Antwort.

Was würdest du als alternative zu PS vorschlagen/empfehlen?
Die entsprechende GPO mit Timeout für getrennte Sitzungen nutzen.

Muss ich ich in machines.txt noch so sachen wie OU=ASB XY,DC=ASB2007,DC=local oder so eintragen oder reicht es wenn ich einfach da nur die Servernamen ts01 ts02 etc untereinander reinschreibe?
Trage dort den FQDN der Server untereinander ein (ts01.ABS2007.local).
Member: user217
user217 Apr 20, 2020 at 12:41:03 (UTC)
Goto Top
Computerkonfiguration -> Richtlinien -> Administrative Vorlagen ->
Windows Komponenten -> Terminalserverdienste -> RDP Sitzungshost ->
Zeitlimits -> bei Inaktivität Nutzer trennen ->
Member: Smilodex
Smilodex Apr 22, 2020 at 07:59:40 (UTC)
Goto Top
Hey vielen dank für die Antwort!

Ja das mit der GPO habe ich bereits so eingestellt.

Allerdings haben wir des öfterern einen seltsamen Fehler, dass sich User an Terminalservern "anmelden" können aber keinen Desktop sehen sondern nur einen schwarzen Bildschirm. Die User sehen quasi nur einen schwarzen Bildschirm, sind angemeldet aber halt irgendwie auch nicht und manchmal greift die GPO dann auch nicht richtig etc etc...


Kann mir jetzt noch jemand den Befehl sagen den ich (wenn ich keinen speziellen User in die users.txtschreibe) verwenden kann, der besagt:
- melde alle getrennten User von den entsprechenden Servern ab

Die Klausel "alle getrennten User" hast du ja oben schon mit
 $users -and $_.SessionState -eq 'STATE_DISCONNECTED'   
abgedeckt oder?

trotz allem muss ja in der users.txt etwas drin stehen (wenn kein spezieller Benutzername drin steht), wenn ich ALLE User von allen Servern abmelden möchte.

 get-aduser -Filter * -SearchBase “dc=ASB2007,dc=local” 
Mitglied: 143728
143728 Apr 22, 2020 updated at 10:54:57 (UTC)
Goto Top
Kann mir jetzt noch jemand den Befehl sagen den ich (wenn ich keinen speziellen User in die users.txt schreibe) verwenden kann, der besagt:
- melde alle getrennten User von den entsprechenden Servern ab
Einfach die Bedingung für die Users aus der Condition raus nehmen

Get-RDServer | ?{$_.Server -in $machines} | Get-RDUserSession | ?{$_.Username -in $users -and $_.SessionState -eq 'STATE_DISCONNECTED'} | Invoke-RDUserLogoff -Force -verbose  
Member: Smilodex
Smilodex Apr 22, 2020 at 10:42:17 (UTC)
Goto Top
Leider bekomme ich Fehlermeldungen wenn ich versuche das Script auszuführen.
Benötige ich irgendwelche PowerShell-Erweiterungen oder muss ich eine bestimmte Shell an einem speziellen Ort durchführen (oder könnte ich als admin angemeldet sogar von jedem in der Domäne zugehörigen Server ausführen)?


Ich habe "Active Directory-Modul für Windows PowerShell" als Administrator auf meinem "Admin-Server" ausgeführt und habe jetzt folgenden Befehl eingegeben:

$machines = gc 'c:\Admin\Batch\logoff_users\machines.txt'  
$users = gc 'c:\Admin\Batch\logoff_users\users.txt'  
Import-Module RemoteDesktop
Get-RDUserSession | ?{$_.HostServer -in $machines -and $_.Username -in $users -and $_.SessionState -eq 'STATE_DISCONNECTED'} | Invoke-RDUserLogoff -Force -verbose    

in users.txt stand ein einzelner testusername der getrennt war
und in machines.txt stand der entsprechende server ts14.abs2007.local drin

und dann habe ich folgende Fehlermeldung erhalten:

Get-RDUserSession : Die Remotedesktopdienste-Bereitstellung ist auf "Admin01.ABS2007.local" nicht vorhanden. Dieser  
Vorgang kann nach dem Erstellen einer Bereitstellung ausgeführt werden. Informationen zum Erstellen einer
Bereitstellung erhalten Sie durch Ausführen von "Get-Help New-RDVirtualDesktopDeployment" oder "Get-Help  
New-RDSessionDeployment".  
In Zeile:4 Zeichen:1
+ Get-RDUserSession | ?{$_.HostServer -in $machines -and $_.Username -i ...
+ ~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Get-RDUserSession

Invoke-RDUserLogoff : Fehler beim Abmelden der Benutzersitzung. Der Zugriff wurde verweigert.
In Zeile:4 Zeichen:128
+ ... State -eq 'STATE_DISCONNECTED'} | Invoke-RDUserLogoff -Force -verbose  
+                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Invoke-RDUserLogoff