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-ID: 566160

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

Ausgedruckt am: 25.11.2024 um 08:11 Uhr

142583
142583 20.04.2020 um 12:49:26 Uhr
Goto Top
Abmelden? Verwaiste Remotedesktopverbindungen?
143728
143728 20.04.2020, aktualisiert am 22.04.2020 um 12:54:21 Uhr
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  
Smilodex
Smilodex 20.04.2020, aktualisiert am 22.04.2020 um 12:08:15 Uhr
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?
143728
143728 20.04.2020 aktualisiert um 15:18:35 Uhr
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).
user217
user217 20.04.2020 um 14:41:03 Uhr
Goto Top
Computerkonfiguration -> Richtlinien -> Administrative Vorlagen ->
Windows Komponenten -> Terminalserverdienste -> RDP Sitzungshost ->
Zeitlimits -> bei Inaktivität Nutzer trennen ->
Smilodex
Smilodex 22.04.2020 um 09:59:40 Uhr
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” 
143728
143728 22.04.2020 aktualisiert um 12:54:57 Uhr
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  
Smilodex
Smilodex 22.04.2020 um 12:42:17 Uhr
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