23/12/2024

PowerShellSystème

Serveur RDS : envoyer un message sur toutes les sessions avec PowerShell

I. Présentation

Après avoir vu ensemble comment installer un serveur RDS, nous allons maintenant voir comment envoyer un message sur toutes les sessions RDS de votre serveur (ou vos serveur RDS), le tout en PowerShell.

Cette astuce s'avère pratique à plus d'un titre, par exemple lorsque vous souhaitez informer vos utilisateurs qu'une maintenance est prévue ou qu'elle va débuter. D'ailleurs, c'est de cette façon que je l'utilise bien souvent.

Sur les versions récentes de Windows Server, la console de gestion RDS accessible par l'intermédiaire du gestionnaire de serveur, ne permet pas d'envoyer un message à plusieurs utilisateurs en même temps. C'est bien dommage mais bon PowerShell est là pour nous sauver (comme bien souvent).

II. Send-RDUserMessage

Pour envoyer notre message, nous allons utiliser le cmdlet "Send-RDUserMessage" mais avant cela, nous devons récupérer la liste des sessions RDS ouvertes.

Il suffit d'exécuter la commande Get-RDUserSession et de stocker le résultat dans une variable, ici $SessionList.

$SessionList = Get-RDUserSession

Pour chaque session, cela récupère plusieurs informations : le nom de la collection RDS, le nom de domaine (format NETBIOS), l'identifiant de l'utilisateur, le serveur hôte et son ID de session unique. Grâce au paramètre CollectionName, vous pouvez cibler une ou plusieurs collections.

Ensuite, dans l'idée, nous allons boucler avec un foreach pour envoyer un message sur chaque session de la liste.

Foreach($Session in $SessionList){
}

Dans cette boucle, il ne reste plus qu'à faire deux choses : définir le titre du message, son contenu, et exécuter la commande pour envoyer le message.

Commençons par définir le titre et le contenu :

$MessageTitle = "Maintenance"
$MesssageBody = "Bonjour, une maintenance est prévue...."

Enfin, voici la commande pour envoyer le message :

Send-RDUserMessage -HostServer $Session.HostServer -UnifiedSessionID $Session.UnifiedSessionId -MessageBody $MesssageBody -MessageTitle $MessageTitle

Une commande que l'on va intégrer dans la boucle, ce qui nous donne le code complet :

$SessionList = Get-RDUserSession
$MessageTitle = "Maintenance"
$MesssageBody = "Bonjour, une maintenance est prévue...."

Foreach($Session in $SessionList){
  Send-RDUserMessage -HostServer $Session.HostServer -UnifiedSessionID $Session.UnifiedSessionId -MessageBody $MesssageBody -MessageTitle $MessageTitle
}

Exécutez ce bout de code et le message va s'afficher sur toutes les sessions, tour à tour, au milieu de l'écran sous forme de pop-up. Les commandes que nous avons utilisées sont intégrées au module PowerShell RemoteDesktop.

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.