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
Sommaire
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.
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"
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.
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"