Sophie referme le rapport de supervision multi-serveurs du TP précédent : « Ce script est excellent. Mais tu ne vas pas le lancer à la main chaque matin à 8h. Il faut qu’il s’exécute tout seul. » C’est le rôle du Planificateur de tâches Windows (Task Scheduler) : déclencher automatiquement un script, à une heure précise, selon une récurrence, ou en réaction à un événement.
Deux approches possibles
On peut créer une tâche planifiée de deux façons : via l’interface graphique (taskschd.msc), ou entièrement en PowerShell — cette seconde approche étant bien plus adaptée dès qu’on veut reproduire la même tâche sur plusieurs serveurs, exactement dans l’esprit de la section 7.
Les trois briques d’une tâche planifiée
Une tâche planifiée PowerShell repose sur trois éléments distincts, qu’on assemble ensuite :
1. L’action : ce qui doit être exécuté.
$action = New-ScheduledTaskAction -Execute "pwsh.exe" `
-Argument "-File C:\Nordika\Scripts\rapport-supervision.ps1"2. Le déclencheur : quand l’action doit se déclencher.
$declencheur = New-ScheduledTaskTrigger -Daily -At "08:00"3. Le contexte d’exécution : sous quel compte la tâche s’exécute.
$principal = New-ScheduledTaskPrincipal -UserId "NORDIKA\svc-supervision" -LogonType ServiceAccount -RunLevel HighestAssembler et enregistrer la tâche
Register-ScheduledTask -TaskName "Rapport-Supervision-Quotidien" `
-Action $action `
-Trigger $declencheur `
-Principal $principal `
-Description "Génère le rapport de supervision multi-serveurs chaque matin à 8h"Vérifier, modifier, supprimer une tâche
Get-ScheduledTask -TaskName "Rapport-Supervision-Quotidien"Pour consulter le résultat de la dernière exécution (statut, dernier code retour) :
Get-ScheduledTaskInfo -TaskName "Rapport-Supervision-Quotidien"Pour supprimer une tâche devenue obsolète :
Unregister-ScheduledTask -TaskName "Rapport-Supervision-Quotidien" -Confirm:$falseLe compte d’exécution : le point le plus souvent mal configuré
Retour d’expérience terrain : la cause la plus fréquente d’une tâche planifiée qui « ne fait rien » en apparence, alors qu’elle est bien enregistrée, est presque toujours liée au compte d’exécution. Un script lancé sous le compte personnel d’un administrateur échouera silencieusement le jour où ce compte change de mot de passe, est désactivé lors d’un départ, ou n’a tout simplement pas les droits nécessaires sur les serveurs distants ciblés par
Invoke-Command.
C’est pourquoi Sophie insiste systématiquement, dans la lignée des principes de sécurité déjà vus en section 6, pour utiliser un compte de service dédié (svc-supervision dans l’exemple ci-dessus), avec seulement les droits strictement nécessaires — jamais un compte personnel, et encore moins un compte disposant de droits d’administration complets du domaine.
Autres types de déclencheurs utiles
Au-delà d’une simple récurrence quotidienne, New-ScheduledTaskTrigger couvre plusieurs scénarios courants à Nordika :
New-ScheduledTaskTrigger -AtStartup # Au démarrage de la machine
New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday -At "06:00" # Chaque lundi à 6h
New-ScheduledTaskTrigger -Once -At (Get-Date) # Exécution unique, immédiateDiagnostiquer une tâche qui échoue silencieusement
Sans logging explicite dans le script lui-même (un sujet approfondi en section 9 avec Start-Transcript), une tâche planifiée qui échoue ne laisse souvent aucune trace visible en dehors de l’observateur d’événements Windows :
Get-WinEvent -LogName "Microsoft-Windows-TaskScheduler/Operational" -MaxEvents 20Bonne pratique constatée en production : ne jamais considérer qu’une tâche planifiée fonctionne simplement parce qu’elle apparaît « Ready » dans
Get-ScheduledTask. Le seul indicateur fiable est le contenu deGet-ScheduledTaskInfo(dernier code retour,LastTaskResultà0signifiant un succès) combiné à une vérification que le script produit bien le résultat attendu — un rapport vide généré à l’heure prévue peut donner une fausse impression de bon fonctionnement.
Un exemple concret Nordika : le script complet, de bout en bout
$action = New-ScheduledTaskAction -Execute "pwsh.exe" `
-Argument "-NoProfile -File C:\Nordika\Scripts\rapport-supervision.ps1"
$declencheur = New-ScheduledTaskTrigger -Daily -At "08:00"
$principal = New-ScheduledTaskPrincipal -UserId "NORDIKA\svc-supervision" `
-LogonType ServiceAccount -RunLevel Highest
$parametres = New-ScheduledTaskSettingsSet -StartWhenAvailable `
-RestartCount 3 -RestartInterval (New-TimeSpan -Minutes 5)
Register-ScheduledTask -TaskName "Rapport-Supervision-Quotidien" `
-Action $action -Trigger $declencheur `
-Principal $principal -Settings $parametres `
-Description "Rapport de supervision multi-serveurs, exécuté chaque matin à 8h"-StartWhenAvailable rattrape l’exécution si la machine était éteinte à l’heure prévue (par exemple après un redémarrage tardif), et -RestartCount/-RestartInterval retentent automatiquement l’exécution en cas d’échec — deux réglages qui évitent bien des rapports manquants sans intervention manuelle.
Source officielle : la documentation Microsoft
about_Scheduled_Jobset le moduleScheduledTasks(Get-Command -Module ScheduledTasks) détaillent l’ensemble des options disponibles, notamment les déclencheurs conditionnels (sur batterie, sur réseau spécifique) utiles sur des postes portables.
Retenez le principe central :
-NoProfiledans l’action est un détail qui compte — il évite que la tâche charge inutilement le profil PowerShell complet (alias personnalisés, modules auto-importés) à chaque exécution planifiée, pour un script qui tourne seul, sans utilisateur derrière l’écran.
Dans la prochaine leçon, on va plus loin dans l’automatisation : faire en sorte que ce rapport soit directement envoyé par email, sans même que quelqu’un ait à aller le consulter.