La correction est intégrée au TP (Voir les encadrés de couleur vert)
Ce que vous allez apprendre dans ce TP
- Écrire dans un journal d’événements
- Planifier un script PowerShell
- Filtrer les journaux et configurer la récupération d’un service
Introduction #
Ce que vous allez apprendre dans cette section
- Écrire dans un journal d’événements
- Planifier un script PowerShell
- Filtrer les journaux et configurer la récupération d’un service
Contexte. Le service d'impression d'un serveur s'arrête régulièrement et le disque se remplit sans prévenir. Avant d'installer un outil de supervision, vous mettez en place une surveillance native.
Prérequis : une machine virtuelle Windows Server 2025 jetable (évaluation gratuite) avec un compte administrateur, et PowerShell ouvert en tant qu'administrateur · Durée estimée : 45 min
Une tâche planifiée qui écrit des événements, des requêtes Get-WinEvent et un service qui redémarre seul.Mise en place #
Étapes guidées, avec leur correction.
1. Créer une source d’événements
Pourquoi ? Un script qui écrit dans les journaux Windows est visible par tous les outils de supervision.
Créez la sourceControleServeurdans le journal Application et écrivez un événement de test (ID 1000).Voir la correction
New-EventLog -LogName Application -Source ControleServeur Write-EventLog -LogName Application -Source ControleServeur -EventId 1000 -EntryType Information -Message 'Test de la source' Get-WinEvent -FilterHashtable @{ LogName = 'Application'; ProviderName = 'ControleServeur' } -MaxEvents 1 | Format-List TimeCreated, Id, Message2. Écrire le script de contrôle
Pourquoi ? Un contrôle simple et fiable vaut mieux qu’un outil mal configuré.
ÉcrivezC:\TP\Scripts\Controle.ps1: alerte (ID 2001, avertissement) si un volume a moins de 15 % libre, alerte (ID 2002, erreur) pour chaque service automatique arrêté, sinon un événement 1000.Voir la correction
@' $src = 'ControleServeur' ; $alertes = 0 Get-Volume | Where-Object { $_.DriveLetter -and $_.Size -gt 0 } | ForEach-Object { $pct = [math]::Round(100 * $_.SizeRemaining / $_.Size, 1) if ($pct -lt 15) { $alertes++; Write-EventLog -LogName Application -Source $src -EventId 2001 -EntryType Warning -Message "Volume $($_.DriveLetter): $pct % libre" } } Get-Service | Where-Object { $_.StartType -eq 'Automatic' -and $_.Status -ne 'Running' } | ForEach-Object { $alertes++; Write-EventLog -LogName Application -Source $src -EventId 2002 -EntryType Error -Message "Service arrêté : $($_.Name)" } if (-not $alertes) { Write-EventLog -LogName Application -Source $src -EventId 1000 -EntryType Information -Message 'Contrôle OK' } '@ | Set-Content C:\TP\Scripts\Controle.ps1 -Encoding UTF8 & C:\TP\Scripts\Controle.ps13. Planifier le contrôle
Pourquoi ? Le planificateur exécute le script sans session ouverte, sous le compte SYSTEM.
Créez la tâche\Exploitation\Controle serveurtoutes les 15 minutes, lancez-la et vérifiez son résultat.Voir la correction
$a = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument '-NoProfile -ExecutionPolicy Bypass -File C:\TP\Scripts\Controle.ps1' $t = New-ScheduledTaskTrigger -Once -At (Get-Date).AddMinutes(1) -RepetitionInterval (New-TimeSpan -Minutes 15) $p = New-ScheduledTaskPrincipal -UserId SYSTEM -LogonType ServiceAccount -RunLevel Highest Register-ScheduledTask -TaskName 'Controle serveur' -TaskPath '\Exploitation\' -Action $a -Trigger $t -Principal $p Start-ScheduledTask -TaskName 'Controle serveur' -TaskPath '\Exploitation\' Get-ScheduledTaskInfo -TaskName 'Controle serveur' -TaskPath '\Exploitation\' | Select-Object LastRunTime, LastTaskResult, NextRunTime4. Provoquer et détecter un incident
Pourquoi ? On vérifie qu’une alerte se déclenche vraiment.
Arrêtez le serviceSpooler, relancez la tâche, puis retrouvez l’événement 2002 et l’arrêt du service dans le journal Système (ID 7036).Voir la correction
Stop-Service Spooler -Force Start-ScheduledTask -TaskName 'Controle serveur' -TaskPath '\Exploitation\' ; Start-Sleep 10 Get-WinEvent -FilterHashtable @{ LogName = 'Application'; ProviderName = 'ControleServeur'; Id = 2002 } -MaxEvents 3 | Select-Object TimeCreated, Message Get-WinEvent -FilterHashtable @{ LogName = 'System'; Id = 7036; StartTime = (Get-Date).AddMinutes(-10) } | Select-Object TimeCreated, Message5. Récupération automatique
Pourquoi ? Le gestionnaire de services peut redémarrer un service tombé sans intervention.
Configurez Spooler pour redémarrer après 1 minute aux deux premiers échecs, puis simulez un plantage en tuant son processus.Voir la correction
Start-Service Spooler sc.exe failure Spooler reset= 86400 actions= restart/60000/restart/60000/none/0 sc.exe qfailure Spooler Stop-Process -Name spoolsv -Force # plantage simulé (un arrêt propre ne déclenche pas la récupération) Start-Sleep 75 ; Get-Service Spooler Get-WinEvent -FilterHashtable @{ LogName = 'System'; Id = 7031, 7034; StartTime = (Get-Date).AddMinutes(-5) } | Select-Object TimeCreated, Id, Message6. Analyser les journaux
Pourquoi ? Quelques requêtes répondent aux questions les plus fréquentes d’un incident.
Affichez les erreurs Système des dernières 24 heures groupées par source, les derniers redémarrages (1074, 6008) et les échecs d’ouverture de session (4625) de la dernière heure.Voir la correction
Get-WinEvent -FilterHashtable @{ LogName = 'System'; Level = 2; StartTime = (Get-Date).AddDays(-1) } -ErrorAction SilentlyContinue | Group-Object ProviderName | Sort-Object Count -Descending | Select-Object Count, Name Get-WinEvent -FilterHashtable @{ LogName = 'System'; Id = 1074, 6008 } -MaxEvents 5 | Select-Object TimeCreated, Id, Message Get-WinEvent -FilterHashtable @{ LogName = 'Security'; Id = 4625; StartTime = (Get-Date).AddHours(-1) } -ErrorAction SilentlyContinue | Measure-Object
Niveau de difficulté : ●●○○○ (2/5)
Mon suivi
Connectez-vous pour suivre votre progression et prendre des notes. Se connecter
💬 Questions sur cette leçon
Aucune question pour l'instant : soyez le premier à demander de l'aide ou à partager votre configuration.
Articles recommandés
Services, tâches planifiées, journaux d’événements et performances
Piloter les services Windows et leur récupération, automatiser avec le planificateur de tâches, e...
Paquets, services systemd, journaux et tâches planifiées
Installer et mettre à jour des logiciels avec apt et dnf, piloter les services avec systemctl, éc...
Processus, mémoire et performance : surveiller et dépanner un serveur Linux
Comprendre et piloter les processus Linux (ps, top, signaux, nice, jobs), interpréter la charge, ...
Réseau Windows : IP, DNS, DHCP, pare-feu et accès à distance
Configurer et diagnostiquer le réseau sous Windows en PowerShell, déployer un serveur DHCP, maîtr...
PowerShell pour l’administrateur Windows
Maîtriser PowerShell pour administrer Windows : cmdlets et aide, pipeline d'objets, filtres et fo...
Stratégies de groupe (GPO) : configurer le parc depuis Active Directory
Concevoir et dépanner les stratégies de groupe : configuration ordinateur et utilisateur, liaison...
Active Directory Domain Services et DNS
Comprendre et déployer Active Directory : forêt, domaines, unités d'organisation, contrôleurs de ...
Sécurité et durcissement d'un serveur Linux
Durcir un serveur Linux : moindre privilège, mises à jour, SSH sécurisé, pare-feu, fail2ban, SELi...
Sauvegarde, supervision et dépannage d'un serveur Linux
Exploiter un serveur Linux au quotidien : stratégie de sauvegarde 3-2-1 avec rsync, tar, snapshot...