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.