(modifié le 12 avril 2024 à 23:11)

Il arrive qu'il y ait un grand nombre de sessions RDP sur un serveur Windows (environnement TSE/RDS ou non). Chaque connexion déconnectée continue de consommer des ressources comme CPU et RAM.

Voici comment fermer les sessions déconnecter en une ligne de commande PowerShell.

La ligne de commande avec "quser"

C'est grâce à quser que nous pouvons identifier les sessions déconnectées qui ne sont pas fermées :

quser | Where-Object { $_ -notmatch (Get-Date).ToString("dd/MM/yyyy") } | Select-String "Déco" | ForEach {logoff ($_.tostring() -split ' +')[2]}

Que fait cette commande ?

Cette commande ferme toutes les sessions déconnectées qui ne datent pas d'aujourd'hui. En effet je considère qu'une session déconnectées depuis plus d'un jour n'a rien à faire sur une serveur.

⚠️ Cela peut engendrer une perte de données si vos utilisateurs ont un logiciel ouvert (comme Word) parce que la session sera fermée en mode forcé (les modifications non enregistrées seront perdues).

Il est vrai que sur Windows Server la traduction française ne permet à l'utilisateur de comprendre la différence entre :

  • Déconnecter
  • Se déconnecter

La première option laisse la session ouverte en arrière plan tandis que la seconde la ferme complètement. Microsoft aurait pu choisir "fermer la session" pour ce soit plus clair pour tout le monde.

Si vous êtes sur une machine Windows Server en langue anglais la ligne de commande ne fonctionnera pas.

Voici une version qui fonctionne en anglais et en français :

quser | Where-Object { ($_ -like '*Déco*' -or $_ -like '*Disc*') -and $_ -notmatch (Get-Date).ToString("dd/MM/yyyy") } | ForEach { logoff ($_.ToString() -split ' +')[2] }

La limite de cette ligne de commande est que le nom d'utilisateur ne devra jamais contenir "déco" ou "Disc" car c'est cet élément qui permet d'identifier une session déconnectée, sinon la session sera systématiquement fermée.

La bonne pratique : définir un délai maximum

Je vous conseille de définir une politique pour limiter la durée des sessions, qu'elles soient actives ou inactives. Vous pouvez le faire par GPO ou bien directement dans les propriétés de votre collection RDS.

Ainsi vous n'aurez même pas besoin d'utiliser cette astuce.

Pour créer une limite de connexion sur votre ferme RDS suivez ce tutoriel.

Conclusion

Si vous faites partie de ceux qui doivent fermer les sessions RDP d'un serveur sur lequel beaucoup de monde "oublie" de se déconnecter, cela devrait vous faire gagner du temps. Que l'on parle d'une ferme RDS, d'un serveur RDS avec ou sans CAL.

Si vous souhaitez que ce script fonctionne en automatique ne le faites pas via le planificateur de tâches, mais par GPO. Et cela ne vous empêche pas de faire une communication *avant* pour avertir les utilisateurs, be smart 🙂

 

 

Auteur : Mr Xhark

Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter