Tâches Planifiées Windows
Ce guide vous explique comment automatiser des tâches sur votre VPS Windows avec le Planificateur de tâches.
Accéder au Planificateur de tâches
Win + R>taskschd.msc- Ou recherchez "Planificateur de tâches"
Créer une tâche simple
Via l'interface graphique
- Dans le panneau droit, cliquez sur Créer une tâche de base...
- Nom : Donnez un nom descriptif
- Déclencheur : Choisissez la fréquence
- Quotidien, Hebdomadaire, Mensuel, etc.
- Action : Sélectionnez Démarrer un programme
- Programme/script : Chemin vers l'exécutable ou script
- Terminer
Exemple : Backup quotidien
- Nom : "Backup Quotidien"
- Déclencheur : Quotidien à 03:00
- Action :
C:\Scripts\backup.bat
Créer une tâche avancée
Pour plus d'options, utilisez Créer une tâche...
Onglet Général
- Nom : Nom de la tâche
- Exécuter même si l'utilisateur n'est pas connecté : Cochez pour les tâches serveur
- Exécuter avec les privilèges les plus élevés : Pour les tâches nécessitant des droits admin
Onglet Déclencheurs
Cliquez sur Nouveau... pour ajouter des déclencheurs :
- Selon un calendrier : Heure fixe
- Au démarrage : Quand le serveur démarre
- À la connexion : Quand un utilisateur se connecte
- Sur un événement : En réponse à un événement Windows
Onglet Actions
- Démarrer un programme : Exécuter un script ou application
- Envoyer un courrier électronique : (déprécié, utilisez un script PowerShell)
- Afficher un message : (déprécié)
Onglet Conditions
- Démarrer la tâche uniquement si l'ordinateur est inactif
- Démarrer uniquement si alimenté sur secteur
- Réveiller l'ordinateur pour exécuter cette tâche
Onglet Paramètres
- Autoriser l'exécution à la demande
- Exécuter la tâche dès que possible si un démarrage planifié a été manqué
- Arrêter la tâche si elle s'exécute plus longtemps que : Timeout
PowerShell : Gestion des tâches
Créer une tâche
# Définir l'action
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Scripts\backup.ps1"
# Définir le déclencheur (tous les jours à 3h)
$trigger = New-ScheduledTaskTrigger -Daily -At 3am
# Définir les paramètres
$settings = New-ScheduledTaskSettingsSet -ExecutionTimeLimit (New-TimeSpan -Hours 1)
# Créer la tâche
Register-ScheduledTask -TaskName "Backup Quotidien" -Action $action -Trigger $trigger -Settings $settings -User "SYSTEM" -RunLevel Highest
Exemples de déclencheurs
# Au démarrage du système
$trigger = New-ScheduledTaskTrigger -AtStartup
# Toutes les heures
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Hours 1) -RepetitionDuration (New-TimeSpan -Days 365)
# Tous les lundis à 8h
$trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday -At 8am
# Le 1er de chaque mois
$trigger = New-ScheduledTaskTrigger -Monthly -DaysOfMonth 1 -At 00:00
Gérer les tâches existantes
# Lister toutes les tâches
Get-ScheduledTask
# Voir les détails d'une tâche
Get-ScheduledTask -TaskName "Backup Quotidien" | Get-ScheduledTaskInfo
# Exécuter une tâche manuellement
Start-ScheduledTask -TaskName "Backup Quotidien"
# Désactiver une tâche
Disable-ScheduledTask -TaskName "Backup Quotidien"
# Activer une tâche
Enable-ScheduledTask -TaskName "Backup Quotidien"
# Supprimer une tâche
Unregister-ScheduledTask -TaskName "Backup Quotidien" -Confirm:$false
Scripts utiles
Script de backup
Créez C:\Scripts\backup.ps1 :
# Configuration
$source = "C:\inetpub\wwwroot"
$destination = "C:\Backups"
$date = Get-Date -Format "yyyy-MM-dd_HH-mm"
$backupFile = "$destination\backup_$date.zip"
# Créer le dossier de destination si nécessaire
if (!(Test-Path $destination)) {
New-Item -ItemType Directory -Path $destination
}
# Créer l'archive
Compress-Archive -Path $source -DestinationPath $backupFile -Force
# Supprimer les backups de plus de 7 jours
Get-ChildItem $destination -Filter "*.zip" | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-7) } | Remove-Item
# Log
Add-Content -Path "C:\Scripts\backup.log" -Value "$(Get-Date): Backup créé - $backupFile"
Script de redémarrage de service
# C:\Scripts\restart-service.ps1
$serviceName = "MonService"
Stop-Service -Name $serviceName -Force
Start-Sleep -Seconds 5
Start-Service -Name $serviceName
# Log
$status = Get-Service -Name $serviceName
Add-Content -Path "C:\Scripts\service.log" -Value "$(Get-Date): $serviceName - $($status.Status)"
Script de nettoyage des logs
# C:\Scripts\cleanup-logs.ps1
$logFolders = @(
"C:\inetpub\logs\LogFiles",
"C:\Windows\Temp"
)
$daysToKeep = 30
foreach ($folder in $logFolders) {
Get-ChildItem $folder -Recurse -File | Where-Object {
$_.LastWriteTime -lt (Get-Date).AddDays(-$daysToKeep)
} | Remove-Item -Force
}
Add-Content -Path "C:\Scripts\cleanup.log" -Value "$(Get-Date): Nettoyage effectué"
Script de monitoring disque
# C:\Scripts\disk-check.ps1
$threshold = 80
$disk = Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='C:'"
$usedPercent = [math]::Round(($disk.Size - $disk.FreeSpace) / $disk.Size * 100)
if ($usedPercent -gt $threshold) {
# Envoyer un email d'alerte
$smtpServer = "smtp.example.com"
$from = "serveur@example.com"
$to = "admin@example.com"
$subject = "Alerte Disque VPS"
$body = "Le disque C: est à $usedPercent% de capacité."
Send-MailMessage -SmtpServer $smtpServer -From $from -To $to -Subject $subject -Body $body
}
Cas d'usage courants
Redémarrer un serveur de jeu toutes les 6 heures
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-Command Restart-Service -Name 'FiveM'"
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Hours 6) -RepetitionDuration ([TimeSpan]::MaxValue)
Register-ScheduledTask -TaskName "Restart FiveM" -Action $action -Trigger $trigger -User "SYSTEM" -RunLevel Highest
Exécuter un script au démarrage
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Scripts\startup.ps1"
$trigger = New-ScheduledTaskTrigger -AtStartup
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries
Register-ScheduledTask -TaskName "Startup Script" -Action $action -Trigger $trigger -Settings $settings -User "SYSTEM" -RunLevel Highest
Voir les logs d'exécution
# Historique d'une tâche
Get-ScheduledTask -TaskName "Backup Quotidien" | Get-ScheduledTaskInfo
# Voir dans l'Observateur d'événements
eventvwr.msc
# Puis : Journaux des applications et services > Microsoft > Windows > TaskScheduler > Operational
Résolution de problèmes
La tâche ne s'exécute pas
- Vérifiez que l'utilisateur a les droits
- Cochez "Exécuter même si l'utilisateur n'est pas connecté"
- Vérifiez les chemins (utilisez des chemins absolus)
- Consultez l'Observateur d'événements
Erreur 0x1
Le script s'est terminé avec une erreur. Testez le script manuellement.
Erreur "Accès refusé"
Exécutez avec les privilèges les plus élevés et/ou utilisez le compte SYSTEM.
Conseil
Testez toujours vos scripts manuellement avant de les planifier, et utilisez des fichiers de log pour suivre leur exécution.