27/07/2024

Gérer les tâches planifiées en PowerShell

PowerShell intègre tout un lot de commandlets dédiés à la gestion des tâches planifiées. Les tâches planifiées sont très utilisées pour la mise en place de routine puisque cela permet d’automatiser le lancement d’une action. Les actions sont illimitées et la seule limitation sera votre imagination, ou plutôt vos besoins puisqu’on ne fera pas une tâche planifiée par plaisir... Ce qui est appréciable c’est que l’on peut exécuter un script PowerShell (.ps1) avec une tâche planifiée.

Pour lister toutes les commandes en lien avec le module de gestion des tâches planifiées, saisissez la commande suivante :

Get-Command -Module ScheduledTasks

I. Est-ce qu’il y a des tâches par défaut ?

Par défaut, selon les éditions de Windows et les services installés, il y a plus ou moins de tâches planifiées créées et actives. On peut vérifier la présence de ces tâches facilement.

Pour commencer à s’exercer, on va compter le nombre de tâches. Pour cela, on compte le nombre d’éléments de la commande « Get-ScheduledTask » :

(Get-ScheduledTask).Count

Dans mon cas, le résultat retourné est « 52 » ce qui correspond au nombre de tâches planifiées présente sur le système à cet instant.

Avec celle que nous allons créer, ça fera 53 tâches !

II. Création d’une tâche planifiée personnalisée

Avant de créer la tâche, on va créer un script nommé "ActiveService.ps1" et le placer dans le répertoire "C:\Rapports\" du serveur CORE01. Ce script permettra d'exporter dans un fichier texte la liste des services actifs sur notre serveur. Créer un répertoire « Rapports » et créez le script via « notepad.exe » Voici son contenu :

Get-Service | Where{ $_.Status -eq "Running" } | Out-File -FilePath C:\Rapports\services.txt

Au même endroit que se trouve ce script, on générera un fichier texte qui contiendra la sortie de la commande. Exécutez la suite de commandes suivantes pour créer la tâche planifiée :

# Action à exécuter - script ActiveService.ps1
$action=New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-ExecutionPolicy Bypass C:\Rapports\ActiveService.ps1"
# Planification de la tâche - Tous les jours à 22:00
$trigger=New-ScheduledTaskTrigger -Daily -At 10:00PM
# Enregistrement de la tâche et "Exécuter sous"
Register-ScheduledTask -TaskName "Service Actif" -Trigger $trigger -Action $action -Description "Exporter la liste des services actifs" -User "CORE01\Administrateur" –Password P@$$w0rd

La tâche est désormais créée et enregistrée dans le planificateur de tâches Windows. On peut vérifier par l'intermédiaire de cette commande :

Get-ScheduledTask "Service Actif" | Select -ExpandProperty Principal

Note : Le planificateur de tâches organise ses tâches en dossiers et sous-dossiers. Notre tâche sera placée à la racine puisque nous n'avons pas précisé de dossier dans lequel ranger cette tâche.

Vérifier la création de la tâche avec Get-ScheduledTask
Vérifier la création de la tâche avec Get-ScheduledTask

La tâche planifiée est désormais créée !

III. Exécuter une tâche planifiée

Plutôt que d'attendre 22:00... On va exécuter la tâche manuellement dès maintenant. Pour cela, on s'appuie sur le commandlet prévu à cet effet : Start-ScheduledTask. Il suffit de préciser le nom de la tâche à démarrer, comme ceci :

Start-ScheduledTask "Service Actif"
Exécuter une tâche planifiée avec Start-ScheduledTask
Exécuter une tâche planifiée avec Start-ScheduledTask

Par précaution et pour tester le bon fonctionnement d'une tâche, voir même pour un debug ultérieur... Il est intéressant d'être en mesure d'obtenir des informations sur l'exécution de cette tâche.

Get-ScheduledTaskInfo "Service Actif"

Avec la commande ci-dessus, on prendra connaissance de la date de prochaine exécution, de la date de dernière exécution ainsi que d'un code significatif du résultat de la dernière exécution. Ce code est intéressant puisqu'il permet de savoir si le déroulement c'est bien passé ou non.

Vérifier l'état de la tâche avec Get-ScheduledTaskInfo
Vérifier l'état de la tâche avec Get-ScheduledTaskInfo

L'état "0" signifie que l'exécution est un succès !

IV. Supprimer une tâche planifiée

Après plusieurs mois de bons et loyaux services, on se rend compte que ce rapport sur l'exécution des services n'est pas très utile... On décide donc de supprimer la tâche :

Unregister-ScheduledTask "Service Actif"
author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail