Déconnecter les sessions à distance dans PowerShell

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 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