Aller au contenu

Monitoring de services Windows

Dans cet article, nous allons explorer les différentes méthodes de monitoring des services Windows afin d’assurer leur bon fonctionnement et leur disponibilité. Le suivi des services critiques permet de détecter rapidement les pannes, de prévenir les interruptions et d’améliorer la réactivité en cas de problème. Vous découvrirez comment mettre en place des outils de surveillance adaptés, ainsi que des alertes automatiques pour une gestion proactive des services Windows.

I. Installation de prérequis

Il faut ouvrir un invité de commandes Powerhsell en tant qu’Administrateur et entrer la commande suivante :
Install-WindowsFeature -Name NET-Framework-45-Features

II. Création du script

Il faut ouvrir un éditeur de texte tel que Bloc Notes, VisualStudioCode ou bien un Powershell ISE et coller le code suivant :
# Configuration du compte de messagerie SMTP
$smtpServer = "SERVEURSMTP"
$smtpPort = "PORTSMTP"
$smtpUser = "USERNAMESMTP"
$smtpPass = "PASSWORDSMTP"

# Configuration de l'e-mail
$from = "ADRESSEEXPEDITRICE"
$to = "ADRESSERECEPTION"
$subject = "**ALERTES SERVICE X**"
$bodyDown = "LE SERVICE X EST EN PANNE."
$bodyUp = "LE SERVICE X EST DE NOUVEAU OPERATIONNEL."

# Variable pour garder la trace de l'etat du service
$serviceDown = $true

# Boucle infinie pour verifier l'etat du service X toutes les 5 minutes
while($true) {
    # Verifier l'etat du service X
    if((Get-Service W3SVC).Status -ne "Running") {
        # Si le service est en panne, redemarrer le service X
        if($serviceDown) {
            Restart-Service W3SVC
            # Envoyer un e-mail pour signaler le redemarrage
            $smtp = New-Object Net.Mail.SmtpClient($smtpServer, $smtpPort)
            $smtp.EnableSsl = $true
            $smtp.Credentials = New-Object System.Net.NetworkCredential($smtpUser, $smtpPass)
            $message = New-Object Net.Mail.MailMessage($from, $to, $subject, $bodyUp)
            $smtp.Send($message)
            $serviceDown = $false
        }
    }
    else {
        # Si le service est operationnel, envoyer un e-mail si le service était auparavant en panne
        if($serviceDown) {
            $smtp = New-Object Net.Mail.SmtpClient($smtpServer, $smtpPort)
            $smtp.EnableSsl = $true
            $smtp.Credentials = New-Object System.Net.NetworkCredential($smtpUser, $smtpPass)
            $message = New-Object Net.Mail.MailMessage($from, $to, $subject, $bodyUp)
            $smtp.Send($message)
            $serviceDown = $false
        }
    }
    # Si le service est en panne, envoyer un e-mail d'alerte
    if($serviceDown) {
        $smtp = New-Object Net.Mail.SmtpClient($smtpServer, $smtpPort)
        $smtp.EnableSsl = $true
        $smtp.Credentials = New-Object System.Net.NetworkCredential($smtpUser, $smtpPass)
        $message = New-Object Net.Mail.MailMessage($from, $to, $subject, $bodyDown)
        $smtp.Send($message)
    }
    # Attendre 1 minute avant de verifier a nouveau
    Start-Sleep -Seconds 60
}