Redémarrer un serveur hôte de session RDS avec notification 🎉

Redémarrage RDS

Explication

Aujourd’hui je vous partage un script très utile qui va vous permettre de redémarrer un hôte de sessions RDS.

On peut se demander pourquoi faire un script alors que l’on peut faire un simple :

Restart-Computer

Et bien déjà c’est mieux de gérer la déconnexion de sessions activent avant de redémarrer sauvagement surtout sur un RDS 😁

Bon à savoir, si des sessions sont activent, le redémarrage ne fonctionnera pas (sauf si l’on ajoute -force mais c’est ce que l’on veut éviter de faire ici justement)

et puis on veut aussi peut être aller plus loin, en attendant et en vérifiant que le redémarrage c’est bien fait.

On dirait pas non à une petite notification également, histoire d’avoir un rapport.

Comment on fait ?

le script comme d’hab, est disponible sur le dépôt GitHub https://github.com/HiteaFR/PowerShell-Scripts/blob/main/Windows%20Server/Restart-RDS.ps1

Pour les curieux, on va quand même détailler les grandes lignes.

On commence par définir les variables

#Le serveur Broker
$ServerBroker = "Srv-Broker.domain.local"

#Le serveur Hôte de session
$ServerHost = "Srv-Host.domain.local"

#L'url WebHook du canal Teams car on va utiliser cette méthode pour la notification
$webhook = "Teams WebHook URL"

Je passe sur la fonction Write-log qui permet d’ajouter des lignes au fichier de log pour le rapport final car ce n’est pas le sujet principal.

Juste bon à savoir, vous pouvez reprendre celle-ci dans vos scripts (c’est très utiles d’avoir des logs ^^)

Ensuite on va récupérer la liste des sessions activent sur l’hôte RDS:

$Sessions = Get-RDUserSession -ConnectionBroker $ServerBroker | Where-Object HostServer -eq $ServerHost

Puis on va parcourir la liste retournée pour déconnecter les récalcitrants ^^:

foreach ($Session in $Sessions) {

  Invoke-RDUserLogoff -HostServer $ServerHost -UnifiedSessionID $Session.UnifiedSessionID -Force

}

On peut donc lancer le redémarrage en attendant que le serveur soit de nouveau en ligne et puis on vérifie aussi qu’il est bien démarré en attendant une réponse du service WinRM

On applique aussi un timeout pour prendre en compte un éventuel problème et que l’on puisse passer à la suite et recevoir un rapport avec l’erreur, 1 heure au cas où il y aurait des mises à jour par exemple.

Restart-Computer -ComputerName $ServerHost -Wait -For WinRM -Delay 30 -Timeout 3600

Pour finir, on va envoyer une notification dans une équipe Teams

J’ai pas mis les détails des logs mais à chaque étape un ligne est ajoutée au fichier .log, ensuite je récupère le contenu dans un objet ($Logcontent) que je peux inclure dans mon rapport

Concernant cette partie, voila à quoi ressemble un JSON de notification Teams:

$body = @{
  "@type"      = "MessageCard"
  "@context"   = "<http://schema.org/extensions>"
  "title"      = 'Rapport de redémarrage serveur'
  "themeColor" = '0055DD'
  "text"       = "Serveur: " + $ServerHost
  "sections"   = @(
    @{
      "activityTitle"    = 'Logs'
      "activitySubtitle" = 'Chemin du fichier: ' + $LogFolder
      "activityText"     = $Logcontent
    }
  )
} | ConvertTo-JSON

Puis je peux envoyer:

Invoke-RestMethod -Method post -ContentType 'application/json; charset=utf-8' -Body $body -Uri $webhook

Conclusion

Avec ce script vous pouvez donc gérer proprement le redémarrage de vos serveurs RDS.

C’est une bonne base pour par exemple ajouter la gestion du redémarrage d’une ferme de serveur RDS.

En fait si vous analysez les cmdlets, on voit que l’on se connecte au Broker pour récupérer les sessions, celui-ci nous retourne toutes les sessions des tous les hôtes de sa collection. Dans mon cas je filtre juste sur les sessions de l’hôte qui m’intéresse mais l’on peut imaginer récupérer l’ensemble et redémarrer tous les hôtes de la collection.

Je vous laisse améliorer et tester cela ! et si jamais un petit commentaire ou une contribution au dépôt ferait de vous une bonne personne, n’oubliez pas 😊👍

Le script complet: https://github.com/HiteaFR/PowerShell-Scripts/blob/main/Windows%20Server/Restart-RDS.ps1

Zalman VE500

Voila un outil indispensable que tout technicien doit avoir avec lui, c’est ce boitier qui contient un HDD/SSD et avec le quel on va pouvoir tout simplement booter sur l’image disque que l’on souhaite (ISO, IMG). d’autres options sont aussi présentes comme la sélection du mode HDD, VCD ou les deux ainsi que le cryptage du disque et le verrouillage en écriture.

On en parle sur le blog !

Vous aimerez aussi...

Laisser un commentaire

%d blogueurs aiment cette page :