Aller au contenu principal

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

  1. Dans le panneau droit, cliquez sur Créer une tâche de base...
  2. Nom : Donnez un nom descriptif
  3. Déclencheur : Choisissez la fréquence
    • Quotidien, Hebdomadaire, Mensuel, etc.
  4. Action : Sélectionnez Démarrer un programme
  5. Programme/script : Chemin vers l'exécutable ou script
  6. Terminer

Exemple : Backup quotidien

  1. Nom : "Backup Quotidien"
  2. Déclencheur : Quotidien à 03:00
  3. 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

  1. Vérifiez que l'utilisateur a les droits
  2. Cochez "Exécuter même si l'utilisateur n'est pas connecté"
  3. Vérifiez les chemins (utilisez des chemins absolus)
  4. 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.