Comment automatiser les scripts PowerShell avec le planificateur de tâches

Le planificateur de tâches Microsoft Windows vous permet de lancer automatiquement un programme ou un script PowerShell à un moment précis ou lorsque certaines conditions sont satisfaites. Il permet également de programmer l’envoi d’e-mails et même l’affichage de certains messages. Dans ce billet de blog, nous allons vous montrer comment exécuter un script PowerShell à partir du planificateur de tâches. Ce script vous alertera de toute installation de logiciel sur un ordinateur local. Nous allons également créer des tâches planifiées à l’aide de scripts PowerShell.
Vous apprendrez à :

  • Créer des tâches avec le planificateur de tâches
  • Modifier ou supprimer des tâches planifiées
  • Créer des tâches planifiées avec des scripts PowerShell

Créer des tâches avec le planificateur de tâches

Ouvrez le planificateur de tâches en appuyant sur les touches Windows+R puis en tapant « taskschd.msc » dans la fenêtre qui s’ouvre. Ensuite, procédez comme suit :
1. Cliquez sur « Créer une tâche » et entrez un nom et une description pour la nouvelle tâche. Pour exécuter le programme avec des privilèges d’administrateur, cochez la case « Exécuter avec les privilèges les plus élevés ». Dans notre exemple, nous allons affecter un compte de service à l’exécution de la tâche, et exécuter celle-ci que l’utilisateur soit connecté ou non.

2. Sélectionnez l’onglet Déclencheurs et cliquez sur le bouton « Nouveau… ». Vous pouvez ici spécifier les conditions qui déclenchent l’exécution de la tâche. Vous pouvez par exemple choisir une exécution à une date/heure donnée, à l’ouverture de session, en veille, au démarrage ou lorsqu’un événement particulier se produit. Nous souhaitons que notre tâche soit déclenchée par toute nouvelle installation de logiciel, nous choisissons donc « Sur un événement » dans le menu déroulant et sélectionnons « Application » dans les paramètres du journal. Laissez le paramètre « Source » vide et entrez « 11707 » pour l’ID de l’événement. Cliquez sur « OK » pour enregistrer les modifications.

3. Ouvrez l’onglet « Actions » et cliquez sur « Nouveau… ». Ici, vous pouvez spécifier les actions à exécuter lorsque les conditions de déclenchement sont remplies. Par exemple, vous pouvez envoyer un e-mail ou afficher un message. En ce qui nous concerne, nous voulons démarrer un programme, nous devons donc créer le script PowerShell que nous souhaitons exécuter et le sauvegarder avec l’extension « ps1 ». Vous pouvez trouver le script ici ; il enverra une alerte avec les détails de l’événement à propos du logiciel installé.

Pour planifier le script PowerShell, spécifiez les paramètres suivants :

  • Action : Démarrer un programme
  • Programme/script : powershell
  • Ajouter des arguments (facultatif) : -Fichier [spécifier ici le chemin d’accès au script]

Cliquez sur « OK » pour enregistrer les modifications.

4. L’onglet « Conditions » vous permet de spécifier les conditions qui, avec le déclencheur, détermineront si la tâche doit être exécutée. Dans notre cas, nous laissons les paramètres par défaut dans cet onglet.

5. Vous pouvez définir des paramètres supplémentaires pour votre tâche planifiée dans l’onglet « Paramètres ». Dans notre exemple, nous les laissons inchangés.

6. Une fois la tâche programmée, le système va vous demander le mot de passe du compte de service. Remarquez que ce compte doit disposer du droit « Se connecter en tant que traitement par lot ». Entrez le mot de passe et cliquez sur « OK » pour enregistrer la tâche.

7. Pour que le planificateur de tâches fonctionne correctement, le service planificateur de travaux doit être configuré pour lancer Exécuter « Services.msc ». Dans la liste des services, trouvez le planificateur de tâches et double-cliquez dessus. Dans l’onglet Général, choisissez le type de démarrage « Automatique » et cliquez sur « OK » pour enregistrer votre modification.

Désormais, chaque fois qu’un nouveau logiciel sera installé sur votre Microsoft Windows Server, vous serez averti par e-mail de l’heure de l’installation, du nom du logiciel et de l’ID utilisateur (SID) de la personne qui l’a installé.

Modifier ou supprimer des tâches planifiées

Pour modifier une tâche existante, cliquez avec le bouton droit de la souris dans la liste, sélectionnez Propriétés, modifiez les paramètres requis et cliquez sur OK. Pour supprimer une tâche planifiée, cliquez avec le bouton droit de la souris, sélectionnez Supprimer et confirmez l’action.

Créer des tâches planifiées avec des scripts PowerShell

À présent que vous savez comment créer une tâche à l’aide du planificateur de tâches, voyons comment créer une tâche planifiée en utilisant PowerShell. Supposons que nous souhaitions que notre tâche soit lancée tous les jours à 10 h, et qu’elle exécute le script PowerShell disponible ici, qui va surveiller les modifications apportées à l’appartenance aux groupes dans le site Active Directory.

Dans Windows Powershell 2.0 (Windows 7, Windows Server 2008 R2), pour créer une tâche planifiée, vous devez utiliser le module TaskScheduler. Installez le module en exécutant la commande « Import-Module TaskScheduler » et utilisez le script suivant pour créer une tâche qui exécutera quotidiennement à 10 heures le script PowerShell GroupMembershipChanges.ps1 :

Import-Module TaskScheduler $task = New-Task
$task.Settings.Hidden = $true
Add-TaskAction -Task $task -Path C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe –Arguments “-File C:\Scripts\GroupMembershipChanges.ps1”
Add-TaskTrigger -Task $task -Daily -At “10:00”
Register-ScheduledJob –Name ”Monitor Group Management” -Task $task

Windows PowerShell 4.0 (Windows Server 2012 R2 et versions ultérieures) n’inclut pas le module TaskScheduler, ce script ne fonctionnera donc pas. À la place, PowerShell 3.0 et 4.0 ont été dotés de nouveaux cmdlets pour créer des tâches planifiées, New-ScheduledTaskTrigger et Register-ScheduledTask, qui rendent la création d’une tâche planifiée beaucoup plus facile et pratique. Nous allons donc créer une tâche qui exécutera notre script quotidiennement à 10 heures avec le compte système (SYSTEM). Cette tâche sera effectuée par un compte doté de privilèges élevés.

$Trigger= New-ScheduledTaskTrigger -At 10:00am –Daily # Specify the trigger settings
$User= "NT AUTHORITY\SYSTEM" # Specify the account to run the script
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C:\PS\StartupScript.ps1" # Specify what program to run and with its parameters
Register-ScheduledTask -TaskName "MonitorGroupMembership" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force # Specify the name of the task

Voici d’autres options de déclenchement qui peuvent être utiles pour créer de nouvelles tâches :

  • -AtStartup — Déclenche votre tâche au démarrage de Windows.
  • -AtLogon — Déclenche votre tâche lorsque l’utilisateur ouvre une session.
  • -Once — Déclenche votre tâche une fois. Vous pouvez définir un intervalle de répétition à l’aide du paramètre -RepetitionInterval.
  • -Weekly — Déclenche votre tâche une fois par semaine.

Remarquez qu’en utilisant ces cmdlets, il n’est pas possible de déclencher l’exécution « sur un événement » comme nous l’avons fait avec l’outil Planificateur de tâches. Les scripts PowerShell avec des déclencheurs « sur un événement » sont beaucoup plus compliqués, c’est donc un réel désavantage d’utiliser PowerShell plutôt que le planificateur de tâches.

Conclusion

Comme vous pouvez le constater, il est facile de créer des tâches planifiées à l’aide du planificateur de tâches ou de PowerShell. Mais rappelez-vous qu’une modification incorrecte de vos tâches planifiées peut entraîner des interruptions de service et dégrader les performances du serveur. Il est donc essentiel d’assurer un suivi de toutes les modifications apportées à vos tâches planifiées.