Déconnecter les sessions à distance dans PowerShell
En tant qu’administrateur d’une organisation, il s’agit d’un problème courant sur un lieu de travail où un serveur ou un poste de travail spécifique peut subir une dégradation des performances.
Cette situation est généralement causée par plusieurs utilisateurs se connectant à distance à la machine, surtout s’il s’agit d’un poste de travail partagé. Cependant, la plupart des utilisateurs qui se connectent à distance ne se déconnectent pas correctement et cliquent simplement sur le bouton de fermeture de leur connexion Bureau à distance ou RDP.
Si l’utilisateur ne se déconnecte pas correctement de la machine, son profil restera actif et consommera des ressources. En tant qu’administrateur, nous pouvons résoudre ce problème en effectuant des opérations de déconnexion.
Cet article explique comment déconnecter les utilisateurs distants à l’aide de la ligne de commande et de PowerShell.
Déconnecter les sessions à distance dans PowerShell
La déconnexion par programme des sessions à distance est facile. Cependant, il est préférable d’utiliser les commandes héritées au lieu des modules de commande PowerShell intégrés dans ce cas d’utilisation.
Par exemple, la commande du module PowerShell Invoke-RDUserLogoff
a ses limites, comme être exécutée uniquement sur un ordinateur joint à un domaine et les systèmes d’exploitation Windows Server 2012 R2 ou 8.1 et inférieur.
Pour l’instant, concentrons-nous sur quelques commandes héritées pour déconnecter les utilisateurs distants qui sont encore largement utilisées à ce jour.
la commande logoff
La commande logoff
mettra fin à la session en cours d’un utilisateur sur un serveur ou un poste de travail local ou distant. Si nous exécutons la commande help avec le code ci-dessous, nous pouvons voir que l’applet de commande logoff
utilise quelques paramètres comme le nom ou l’identifiant de la session et le nom du serveur, qui sont tous deux critiques.
Exemple de code :
logoff /?
Production:
LOGOFF [sessionname | sessionid] [/SERVER:servername] [/V] [/VM]
Si nous savons déjà quel serveur cibler, comment pourrions-nous connaître la session en cours sur cette machine ? Nous allons maintenant utiliser la commande query user ou quser
.
Requête pour la session utilisateur à l’aide de la commande quser
Pour l’instant, essayez d’exécuter quser
sur votre machine locale avec l’extrait de code ci-dessous.
Exemple de code :
quser
Production:
USERNAME SESSION NAME ID STATE IDLE TIME LOGON TIME
>marion console 1 Active none 6/10/2022 5:56 AM
L’exécution de la commande quser
affichera toutes les sessions en cours sur votre ordinateur. Cependant, comment pouvons-nous isoler l’identifiant de session d’un utilisateur spécifique sur un serveur distant sans réellement nous connecter à ce serveur ?
Rappelons que nous pouvons exécuter la commande quser
localement tout en ciblant un ordinateur distant. Tout ce dont il a besoin est un compte administrateur qui a le droit de se connecter aux ordinateurs à distance.
À partir de ce moment, nous aurons besoin de Windows PowerShell.
Nous aurons besoin de PowerShell pour l’extrait ci-dessous pour effectuer des opérations de chaîne comme -split
. De plus, la sortie ci-dessous affichera l’identifiant de session de l’utilisateur, dont nous avons besoin comme paramètre pour la commande logoff
.
Exemple de code :
((quser /server:RDP01 | ? { $_ -match "marion" }) -split ' +')[3]
Production:
1
Il convient de noter que nous pouvons exécuter des commandes héritées dans PowerShell comme quser
et logoff
. Donc, à partir de maintenant, nous allons maintenant utiliser le terminal PowerShell au lieu de l’invite de commande comme interprète.
Déconnecter les utilisateurs à l’aide des commandes quser
et logoff
Maintenant que nous savons comment obtenir l’ID de session d’un utilisateur sans établir de session à distance sur l’ordinateur, nous pouvons combiner toutes les commandes dans PowerShell. Nous pouvons suivre l’extrait de code ci-dessous à titre d’exemple.
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
Comme vous pouvez le constater, nous avons créé de nouveaux alias pour les commandes quser
et logoff
. Cette étape est facultative, mais nous l’avons fait pour nous immerger encore plus dans les scripts PowerShell en utilisant le format de commande Verb-Noun.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn