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

Le planificateur de tâches de Microsoft Windows peut vous aider à lancer automatiquement un programme ou un script PowerShell à une certaine heure ou lorsque certaines conditions sont remplies. Vous pouvez également planifier l’envoi d’e-mails et même l’affichage de certains messages. Dans ce blog, nous vous montrerons comment exécuter un script PowerShell à partir du planificateur de tâches qui alertera sur 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

Ouvrir le planificateur de tâches en appuyant sur « Windows+R » puis en tapant « taskschd.msc » dans la fenêtre qui s’ouvre. Suivez ensuite les étapes suivantes :

1. Cliquez sur « Créer une tâche » et saisissez 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 pour exécuter la tâche, et l’exécuter indépendamment du fait que l’utilisateur soit connecté ou non.

2. Passez à l’onglet Déclencheurs et cliquez sur le bouton « Nouveau… ». Ici, vous pouvez spécifier les conditions qui déclenchent l’exécution de la tâche. Par exemple, vous pouvez la faire exécuter selon une planification, à la connexion, au repos, au démarrage ou à chaque fois qu’un événement particulier se produit. Nous voulons 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 définissez l’EventID sur « 11707 ». Cliquez sur « OK » pour enregistrer les modifications.

3. Naviguez vers l’onglet « Actions », et cliquez sur « Nouveau… ». Ici, vous pouvez spécifier les actions qui seront exécutées chaque fois que les conditions du déclencheur sont remplies. Par exemple, vous pouvez envoyer un email ou afficher un message. Dans notre cas, nous voulons lancer un programme, nous devons donc créer le script PowerShell que nous voulons exécuter et l’enregistrer avec l’extension « ps1 ». Vous pouvez trouver le script ici ; il enverra une alerte avec les détails de l’événement concernant le logiciel installé.

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

  • Action : Démarrer un programme
  • Program\script : powershell
  • Ajouter des arguments (facultatif) : -File

Cliquez sur « OK » pour enregistrer vos modifications.

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

5. Vous pouvez également configurer des paramètres supplémentaires pour votre tâche planifiée dans l’onglet « Paramètres ». Pour notre exemple, cependant, nous les laisserons inchangés.

6. Lorsque la tâche est complètement configurée, le système vous demandera le mot de passe du compte de service. Notez que ce compte doit avoir le droit « Se connecter en tant que tâche 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 tâches doit être configuré pour démarrer Exécutez « Services.msc ». Dans la liste des services, trouvez Task Scheduler et double-cliquez dessus. Dans l’onglet Général, définissez le type de démarrage sur « Automatique » et cliquez sur OK pour enregistrer votre modification.

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

Modification ou suppression des tâches planifiées

Pour modifier une tâche existante, faites un clic droit sur celle-ci dans la liste, sélectionnez Propriétés, modifiez les paramètres requis et cliquez sur OK. Pour supprimer une tâche planifiée, faites un clic droit dessus, sélectionnez Supprimer et confirmez l’action.

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

Maintenant que vous savez comment créer une tâche à l’aide de Task Scheduler, découvrons comment créer une tâche planifiée à l’aide de PowerShell. Supposons que nous voulions que notre tâche soit lancée tous les jours à 10 heures, et qu’elle doive exécuter le script PowerShell que vous pouvez trouver ici, qui surveillera les changements d’appartenance à un groupe 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 le script PowerShell nommé GroupMembershipChanges.ps1 tous les jours à 10 heures:

Import-Module TaskScheduler $task = New-Task$task.Settings.Hidden = $trueAdd-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 plus) n’inclut pas le module Task Scheduler, donc ce script ne fonctionnera pas. Au lieu de cela, PowerShell 3.0 et 4.0 a introduit de nouvelles 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 plus pratique. Créons donc une tâche qui exécutera notre script quotidiennement à 10 heures du matin en utilisant le compte système (SYSTEM). Cette tâche sera exécutée par un compte ayant des 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 parametersRegister-ScheduledTask -TaskName "MonitorGroupMembership" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force # Specify the name of the task

Autres options de déclenchement qui pourraient être utiles pour créer de nouvelles tâches, notamment:

  • -AtStartup – Déclenche votre tâche au démarrage de Windows.
  • -AtLogon – Déclenche votre tâche lorsque l’utilisateur se connecte.
  • -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.

Notez 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 Task Scheduler. Les scripts PowerShell avec des déclencheurs « sur un événement » sont beaucoup plus compliqués, c’est donc un véritable inconvénient de l’utilisation de PowerShell plutôt que de Task Scheduler.

Conclusion

Comme vous pouvez le voir, il est facile de créer des tâches planifiées à l’aide de Task Scheduler ou de PowerShell. Mais n’oubliez pas que des modifications inappropriées de vos tâches planifiées peuvent provoquer des interruptions de service et dégrader les performances du serveur. Par conséquent, il est essentiel de suivre toutes les modifications apportées à vos tâches planifiées.

Jeff est directeur de l’ingénierie des solutions mondiales chez Netwrix. Il est un blogueur, conférencier et présentateur de longue date de Netwrix. Dans le blog de Netwrix, Jeff partage des lifehacks, des conseils et des astuces qui peuvent améliorer considérablement votre expérience d’administration système.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.