Polarys
PowerShell pour l'administration/Remoting et tâches planifiées

Remoting et tâches planifiées

Tâches planifiées PowerShell

Tâches planifiées PowerShell

Planifier l'exécution automatique de scripts PowerShell sans passer par l'interface graphique du Planificateur de tâches.

Créer une tâche planifiée

# Définir l'action (quelle commande exécuter)
$action = New-ScheduledTaskAction `
    -Execute "powershell.exe" `
    -Argument "-NonInteractive -NoProfile -ExecutionPolicy Bypass -File C:\Scripts\surveillance.ps1"

# Définir le déclencheur (quand)
$trigger = New-ScheduledTaskTrigger -Daily -At "06:00"  # tous les jours à 6h

# Déclencheur hebdomadaire
$triggerWeekly = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday -At "08:00"

# Déclencheur au démarrage
$triggerBoot = New-ScheduledTaskTrigger -AtStartup

# Définir le principal (sous quel compte)
$principal = New-ScheduledTaskPrincipal `
    -UserId "SYSTEM" `
    -LogonType ServiceAccount `
    -RunLevel Highest

# Enregistrer la tâche
Register-ScheduledTask `
    -TaskName "Surveillance Disques" `
    -Description "Vérifie l'espace disque quotidiennement" `
    -Action $action `
    -Trigger $trigger `
    -Principal $principal

Gérer les tâches existantes

# Lister toutes les tâches
Get-ScheduledTask | Select-Object TaskName, State, TaskPath | Format-Table

# Lister les tâches actives seulement
Get-ScheduledTask | Where-Object { $_.State -eq 'Ready' }

# Exécuter manuellement une tâche
Start-ScheduledTask -TaskName "Surveillance Disques"

# Désactiver / réactiver
Disable-ScheduledTask -TaskName "Surveillance Disques"
Enable-ScheduledTask -TaskName "Surveillance Disques"

# Supprimer une tâche
Unregister-ScheduledTask -TaskName "Surveillance Disques" -Confirm:$false

# Voir le dernier résultat d'exécution
Get-ScheduledTaskInfo -TaskName "Surveillance Disques" |
    Select-Object LastRunTime, LastTaskResult, NextRunTime

Cas concret : déploiement de script de monitoring

# Script surveillance.ps1 à déployer
$scriptContent = @'
$rapport = Get-PSDrive -PSProvider FileSystem | Select-Object Name,
    @{N='Libre_GB';E={[math]::Round($_.Free/1GB,1)}},
    @{N='Total_GB';E={[math]::Round(($_.Used+$_.Free)/1GB,1)}}
$rapport | Export-Csv "C:\Rapports\disques-$(Get-Date -Format yyyyMMdd).csv" -NoTypeInformation
'@

# Écrire le script
$scriptContent | Set-Content -Path C:\Scripts\surveillance.ps1

# Créer la tâche planifiée
$action = New-ScheduledTaskAction -Execute "powershell.exe" `
    -Argument "-NonInteractive -NoProfile -ExecutionPolicy Bypass -File C:\Scripts\surveillance.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At "07:00"
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -RunLevel Highest

Register-ScheduledTask "Rapport Disques Quotidien" -Action $action -Trigger $trigger -Principal $principal
Write-Host "Tâche créée. Premier rapport demain à 7h."

Erreurs fréquentes

  • ExecutionPolicy : PowerShell bloque par défaut les scripts. Ajouter -ExecutionPolicy Bypass dans l'argument de la tâche planifiée (ne modifie pas la politique globale).
  • Chemins relatifs dans les scripts : la tâche planifiée s'exécute avec C:\Windows\System32 comme répertoire courant. Utiliser des chemins absolus dans le script.
  • Compte SYSTEM sans accès réseau : le compte SYSTEM n'a pas accès aux ressources réseau. Pour accéder à des partages, utiliser un compte de service dédié.

À retenir

  • New-ScheduledTaskAction + New-ScheduledTaskTrigger + Register-ScheduledTask = triplet de création.
  • Toujours -ExecutionPolicy Bypass dans l'argument PowerShell de la tâche.
  • Utiliser des chemins absolus dans les scripts planifiés.
  • Compte SYSTEM = accès local uniquement (pas de réseau sans configuration Kerberos).

Quiz de validation

Quiz - 2 questions

1. Pourquoi ajouter -ExecutionPolicy Bypass dans l'argument de la tâche planifiée ?

2. Quelle commande affiche le dernier résultat d'exécution d'une tâche planifiée ?

Suis ta progression

Crée un compte gratuit pour suivre ta progression et accéder à toutes les leçons.