Comment automatiser les tâches planifiées à l’aide de PowerShell

Oui, gérer les tâches planifiées via l’interface graphique classique n’est pas toujours la méthode la plus rapide ni la plus flexible, surtout si vous souhaitez automatiser des processus ou modifier rapidement une configuration. De plus, l’interface graphique de Windows peut parfois être un vrai casse-tête : elle n’est pas toujours claire, voire dysfonctionne parfois lorsqu’on essaie de modifier des déclencheurs, des autorisations ou des actions de type cron. PowerShell représente donc une alternative très intéressante, offrant un meilleur contrôle et des possibilités de script. C’est un peu déroutant au début si on n’y est pas habitué, mais une fois les commandes maîtrisées, c’est un outil révolutionnaire pour la gestion des tâches planifiées, notamment sur les serveurs ou lors du déploiement sur plusieurs machines.

Ce guide vous explique comment créer, modifier, exécuter et même exporter/importer des tâches planifiées avec PowerShell. Que vous souhaitiez configurer une tâche qui exécute un script au démarrage ou programmer une sauvegarde hebdomadaire, ces outils vous seront très utiles. De plus, ils peuvent vous sauver la mise si votre interface graphique ne fonctionne pas correctement ou si vous préférez utiliser des scripts pour plus de cohérence. Attendez-vous à découvrir des commandes brutes, quelques astuces et peut-être même quelques situations où Windows vous donnera du fil à retordre.

Comment gérer les tâches planifiées Windows à l’aide de PowerShell

Création d’une tâche planifiée avec PowerShell

La première étape consiste donc à créer une tâche. Inutile de naviguer dans le Planificateur de tâches (sauf si vous y tenez vraiment), car PowerShell peut tout faire grâce à ScheduledTasksses modules. Croyez-moi, la configuration des tâches répétitives sera bien plus simple une fois que vous maîtriserez la syntaxe.

Pourquoi s’embêter ? Parce que si vous souhaitez qu’un script s’exécute au démarrage, à des heures précises ou même avec des privilèges élevés, PowerShell peut le faire en quelques lignes. Le principe est simple : vous créez une tâche Trigger(quand elle s’exécute), une instruction Action(quelle est sa fonction) et un processus Principal(qui l’exécute), puis vous l’enregistrez dans le planificateur de tâches.

Voici un aperçu rapide d’une configuration typique :

  • Définir un nom pour la tâche :$NewTaskName = "StartupScript_PS"
  • Choisissez le compte utilisateur : SYSTEM est pratique si vous souhaitez que le script s’exécute quel que soit l’utilisateur connecté. Pour les autres utilisateurs, spécifiez le nom d’utilisateur "DOMAIN\username". Notez que si vous exécutez le script en tant qu’utilisateur non administrateur, celui-ci doit être autorisé à s’ouvrir en tant que tâche par lots (vérifiez la stratégie locale pour l’option « Ouvrir une session en tant que tâche par lots »).
  • Exemple pour un compte système :
  • $User="NT AUTHORITY\SYSTEM"
  • Pour un utilisateur spécifique :
  • $User = "woshub\sysops1"

Pour créer un déclencheur qui s’exécute tous les jours à 10h00, il suffit de procéder comme suit :

$Trigger = New-ScheduledTaskTrigger -At 10:00am -Daily

Astuce : D’autres options d’horaires si vous avez envie de pimenter un peu les choses :

  • Exécuter au démarrage :$Trigger = New-ScheduledTaskTrigger -AtStartup
  • Exécuter lors de la connexion de l’utilisateur :$Trigger = New-ScheduledTaskTrigger -AtLogon
  • Une chose ponctuelle :$Trigger= New-ScheduledTaskTrigger -Once -At 03:00
  • Chaque semaine, à des jours précis :$Trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Wednesday -At 01:00

Passons maintenant à la configuration de la tâche. Par exemple, pour exécuter un script PowerShell, vous pouvez procéder comme suit :

$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File C:\PS\StartupScript.ps1"

Cette -Bypasspartie est plutôt cruciale : elle empêche PowerShell de paniquer et de refuser de s’exécuter en raison de règles de sécurité.

Enfin, pour enregistrer la tâche dans le Planificateur de tâches Windows :

Register-ScheduledTask -TaskName $NewTaskName -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force

C’est -RunLevel Highestce qui permet de l’exécuter avec des droits d’administrateur si nécessaire. Si tout fonctionne correctement, la tâche apparaîtra dans la bibliothèque du Planificateur de tâches, confirmant ainsi sa configuration.

Sur certaines configurations, l’utilisation de la Register-ScheduledTaskcommande peut se comporter de manière inattendue la première fois : elle peut afficher « Prêt » mais ne pas s’exécuter. Généralement, un redémarrage ou l’exécution de PowerShell en tant qu’administrateur résout le problème. Car, bien sûr, Windows se doit de compliquer les choses inutilement.

Modification et gestion des tâches existantes

Si vous devez modifier une tâche ultérieurement, vous pouvez utiliser cette fonction Set-ScheduledTask. Par exemple, vous pourriez vouloir ajouter un nouveau déclencheur ou changer la personne qui l’exécute :

$trigger1 = New-ScheduledTaskTrigger -At 05:00 -Weekly -DaysOfWeek Monday $trigger2= New-ScheduledTaskTrigger -At 05:00 -Weekly -DaysOfWeek Saturday $action = New-ScheduledTaskAction -Execute "myapp.exe" Set-ScheduledTask -TaskName StartupScript_PS -Trigger $trigger1, $trigger2 -Action $action 

Ou, si vous devez changer le compte utilisateur sous lequel il s’exécute :

$task_user = New-ScheduledTaskPrincipal -UserId 'woshub\j.abrams' -RunLevel Highest $task_settings = New-ScheduledTaskSettingsSet -Compatibility 'Win8' Set-ScheduledTask -TaskName StartupScript_PS -Principal $task_user -Settings $task_settings 

Attention : si vous voyez des erreurs du type « Aucune correspondance entre les noms de compte et les identifiants de sécurité », vérifiez attentivement le nom d’utilisateur. Windows peut être capricieux, surtout si vous modifiez les comptes de domaine ou locaux.

Gestion des tâches en temps réel et vérification des processus en cours

Pour afficher les tâches en cours, exécutez :

Get-ScheduledTask -TaskPath | ? { $_. State -ne 'Disabled' }

Il indique la date de la dernière exécution, les éventuelles erreurs et la date de la prochaine. Utile pour le dépannage ou pour vérifier le bon fonctionnement de votre nouvelle configuration.

Vous voulez lancer une tâche immédiatement ? Start-ScheduledTask -TaskName CheckServiceState— Hop, lancez-la ! Et si vous voulez supprimer une tâche, il suffit d’exécuter :

Unregister-ScheduledTask -TaskName CheckServiceState

Tâches d’exportation et d’importation — Le partage, c’est important

C’est plutôt pratique : l’exportation des configurations au format XML permet de les copier ou de les sauvegarder.

Export-ScheduledTask -TaskName StartupScript | Out-File c:\tmp\StartupScript.xml

Et pour importer cette sauvegarde sur un nouvel ordinateur ? Il suffit de procéder comme suit :

Register-ScheduledTask -Xml (Get-Content "C:\tmp\StartupScript.xml" | Out-String) -TaskName "StartupScript"

C’est extrêmement pratique pour le déploiement sur plusieurs machines ou pour conserver une sauvegarde de vos configurations de tâches parfaitement optimisées. En entreprise, vous pouvez également déployer des tâches planifiées via la stratégie de groupe ; sans surprise, c’est souvent la meilleure solution pour gérer des dizaines, voire des centaines de machines.

J’espère que cela vous fera gagner quelques heures si vous étiez bloqué à cliquer sans fin. PowerShell offre une multitude de fonctionnalités ; une fois la syntaxe maîtrisée, c’est un gain de temps considérable.

Résumé

  • Utilisez les commandes PowerShell pour créer, modifier et gérer les tâches planifiées.
  • Les déclencheurs sont flexibles : ils peuvent s’exécuter au démarrage, à l’ouverture de session, à des heures spécifiques ou de manière hebdomadaire.
  • Les actions peuvent être des scripts, des programmes ou des commandes.
  • Exportez et importez facilement des tâches via des fichiers XML.
  • PowerShell associé au Planificateur de tâches est bien plus flexible et automatisable que l’interface graphique.

Conclure

Configurer vos tâches planifiées avec PowerShell peut sembler un peu intimidant au premier abord, mais croyez-moi, ça vaut vraiment le coup. C’est plus rapide, plus facile à automatiser et la gestion de plusieurs machines devient beaucoup plus simple. Une fois les commandes maîtrisées, vous vous demanderez pourquoi vous vous êtes donné la peine de naviguer dans l’interface graphique. N’oubliez pas que Windows peut parfois présenter des dysfonctionnements et nécessiter un redémarrage ou l’exécution de PowerShell en tant qu’administrateur ; ne vous découragez donc pas trop vite. Mais une fois le coup de main pris, la gestion des tâches planifiées devient un jeu d’enfant.