Abmelden von Remotesitzungen in PowerShell

Abmelden von Remotesitzungen in PowerShell

Als Administrator einer Organisation ist dies ein häufiges Problem an einem Arbeitsplatz, an dem die Leistung eines bestimmten Servers oder einer bestimmten Arbeitsstation beeinträchtigt werden kann.

Diese Situation wird normalerweise dadurch verursacht, dass sich mehrere Benutzer remote mit dem Computer verbinden, insbesondere wenn es sich um eine gemeinsam genutzte Arbeitsstation handelt. Die meisten Benutzer, die eine Remoteverbindung herstellen, melden sich jedoch nicht ordnungsgemäß ab und klicken einfach auf die Schaltfläche Schließen auf ihrer Remotedesktopverbindung oder RDP.

Wenn sich der Benutzer nicht ordnungsgemäß vom Computer abmeldet, bleibt sein Profil aktiv und verbraucht Ressourcen. Als Administrator können wir dies beheben, indem wir Abmeldevorgänge durchführen.

In diesem Artikel wird erläutert, wie wir Remotebenutzer mithilfe der Befehlszeile und PowerShell abmelden können.

Abmelden von Remotesitzungen in PowerShell

Das programmgesteuerte Abmelden von Remotesitzungen ist einfach. In diesem Anwendungsfall ist es jedoch besser, ältere Befehle anstelle der integrierten PowerShell-Befehlsmodule zu verwenden.

Zum Beispiel hat der Befehl Invoke-RDUserLogoff des PowerShell-Moduls seine Einschränkungen, da er nur auf einem Computer mit Domänenbeitritt und den Betriebssystemen Windows Server 2012 R2 oder 8.1 und niedriger ausgeführt werden kann.

Konzentrieren wir uns zunächst auf ein paar ältere Befehle zum Abmelden von Remote-Benutzern, die bis heute weit verbreitet sind.

den logoff-Befehl

Der Befehl logoff beendet die aktuelle Sitzung eines Benutzers auf einem lokalen oder entfernten Server oder einer Arbeitsstation. Wenn wir den Hilfebefehl mit dem folgenden Code ausführen, können wir sehen, dass das Cmdlet logoff einige Parameter wie den Sitzungsnamen oder die ID und den Servernamen verwendet, die beide kritisch sind.

Beispielcode:

logoff /?

Ausgabe:

LOGOFF [sessionname | sessionid] [/SERVER:servername] [/V] [/VM]

Wenn wir bereits wissen, auf welchen Server wir abzielen sollen, wie können wir dann die aktuelle Sitzung auf diesem Computer kennen? Wir verwenden nun den Benutzerbefehl query oder quser.

Abfrage der Benutzersitzung mit dem Befehl quser

Versuchen Sie vorerst, quser mit dem folgenden Code-Snippet auf Ihrem lokalen Computer auszuführen.

Beispielcode:

quser

Ausgabe:

USERNAME              SESSION NAME        ID  STATE   IDLE TIME  LOGON TIME
>marion               console             1  Active      none   6/10/2022 5:56 AM

Wenn Sie den Befehl quser ausführen, werden alle aktuellen Sitzungen auf Ihrem Computer angezeigt. Wie können wir jedoch die Sitzungs-ID eines bestimmten Benutzers auf einem Remote-Server isolieren, ohne uns tatsächlich bei diesem Server anzumelden?

Denken Sie daran, dass wir den Befehl quser lokal ausführen können, während wir auf einen entfernten Computer abzielen. Alles, was es braucht, ist ein Administratorkonto, das das Recht hat, sich remote mit Computern zu verbinden.

Ab diesem Punkt benötigen wir Windows PowerShell.

Wir benötigen PowerShell für das unten stehende Snippet, um Zeichenfolgenoperationen wie -split auszuführen. Darüber hinaus zeigt die folgende Ausgabe die Sitzungs-ID des Benutzers an, die wir als Parameter für den Befehl logoff benötigen.

Beispielcode:

((quser /server:RDP01 | ? { $_ -match "marion" }) -split ' +')[3]

Ausgabe:

1

Es ist erwähnenswert, dass wir in PowerShell Legacy-Befehle wie quser und logoff ausführen können. Daher verwenden wir ab jetzt das PowerShell-Terminal anstelle der Eingabeaufforderung als unseren Interpreter.

Abmelden von Benutzern mit den Befehlen quser und logoff

Jetzt, da wir wissen, wie man die Sitzungs-ID eines Benutzers erhält, ohne eine Remotesitzung auf dem Computer einzurichten, können wir alle Befehle in PowerShell kombinieren. Wir können dem folgenden Code-Snippet als Beispiel folgen.

Set-Alias Query-User quser
Set-Alias Logoff-User logoff

$serverName   = 'RDP01'
$userName = 'marion'

$sessionID = ((Query-User /server:$serverName | ? { $_ -match $userName }) -split ' +')[3]

Logoff-User $sessionID /server:$serverName

Wie Sie sehen können, haben wir neue Aliase für die Befehle quser und logoff erstellt. Dieser Schritt ist optional, aber wir haben dies getan, um noch mehr in die PowerShell-Skripterstellung einzutauchen, indem wir das Verb-Substantiv-Befehlsformat verwenden.

Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn