RDS/Terminalserver Nachricht an alle aktiven Benutzer schicken

RDS/Terminalserver Nachricht an alle aktiven Benutzer schicken

LINK zum RDSMessenger

Innerhalb einer RDServer Umgebung (RemoteDesktop) früher auch bekannt als Terminalserver Umgebung kann es von Zeit zu Zeit notwendig sein, seine Benutzer zu informieren. Egal ob es eine Wartung oder ein allgemeines Problem gibt. Ich habe hierzu etwas gesucht, aber leider nichts wirklich passendes im Internet gefunden. Deshalb habe ich mich entschlossen selbst ein kleines Skript zu entwerfen, welches diesen Job erledigt.
Mit Windows Server 2012 wurde ein neues cmdlet eingeführt.

https://docs.microsoft.com/en-us/powershell/module/remotedesktop/send-rdusermessage?view=win10-ps

Send-RDUserMessage

Was soll erreicht werden:

Das cmdlet kann verwendet werden, nachdem dieses und die anderen RemoteDesktop cmdlets importiert wurden. Eine solche Nachricht wird nicht nur auf Desktopverbindungen, sondern auch in RemoteApps angezeigt. (RemoteDesktop Powershell Modul ist ab 2012 bereits vorinstalliert)

Wie bereits erwähnt wird die Nachricht durch das cmdlet Send-RDUserMessage erstellt, allerdings kann dies nur für jeweils einen Benutzer getan werden. Deshalb hier mal die Kernzeilen meines Skriptes:

$broker = "FQDN of the Broker"
$userids = Get-RDUserSession -ConnectionBroker "$broker" | sort Username
foreach($uid in $userids){
            $id = (($uid).UnifiedSessionID)
             Send-RDUserMessage -HostServer $broker -UnifiedSessionID $id -MessageTitle "messagetitel" -MessageBody "text in your messagebox"
             }

Soweit funktioniert die Benachrichtigung schonmal, mit dem folgenden Skript bekommt man noch etwas mehr Rückmeldung und Ausgabe:

#fill message
$msgtitel = Read-Host "Type message titel"
$msg = Read-Host "Type message..."
$broker = Read-Host "Type FQDN of rd broker server"
#getting all user ids 
$userids = Get-RDUserSession -ConnectionBroker "$broker" | Sort-Object Username
$sessions = ($userids | Select-Object UserName,UnifiedSessionId)|Out-String
Write-host "Getting all active sessions on rd broker $broker" -ForegroundColor Yellow
Write-host "$sessions" -ForegroundColor Yellow
#send message to all user ids
foreach($uid in $userids){
            $id = (($uid).UnifiedSessionID)
            $user = (($uid).UserName)
            Send-RDUserMessage -HostServer $broker -UnifiedSessionID $id -MessageTitle "$msgtitel" -MessageBody "$msg"
            Write-Host "Sending message to user: $user with titel: $msgtitel" -ForegroundColor Green
}
pause

So sieht das Skript in Aktion aus:

Nach der kleinen Einführung, schauen wir noch auf einige Funktionen meines Skriptes bzw. dessen Parameter:

Beispiel 1: einfach nur ausführen

Beispiel 2: Ausführen mit Parametern
.\rdmessenger.ps1 -rdbroker rds02.demo01.it-koehler.com -messagetitel „admin message“ -message „message to display“ -Verbose

Beispiel 3: Ausführen mit dem Parameter -rdsessionhost
.\rdmessenger.ps1 -rdbroker rds02.demo01.it-koehler.com -messagetitel „admin message“ -message „message to display“ -rdsessionhost rds02.demo01.it-koehler.com

Weitere Funktionen des Skriptes:

  • überprüft die notwendigen Module
  • importiert die notwendigen Module
  • wartet 10 Sekunden bevor die Nachricht gesendet wird
  • für detaillierte Ausgabe kann der VERBOSE Befehl verwendet werden

Für weitere Infos kann man auch gerne die Kommentare im Skript anschauen.

Wer weitere Fragen hat kann diese gerne in der Kommentarleiste stellen. Sollte euch das Tool gefallen klickt einfach auf „Helpful“, wenn ihr Featureanfragen habt, einfach Kommentar da lassen. Viel Spaß beim Nachrichten senden.

Print Friendly, PDF & Email
  • Was this Helpful ?
  • yes   no

One thought on “RDS/Terminalserver Nachricht an alle aktiven Benutzer schicken

Leave a Reply

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.