Petit article « astuce » histoire de se rafraichir la mémoire sur le lancement d’un script Powershell via le planificateur de tâches de Windows (parce que flemme de se lever à 3h du mat tous les dimanches pour lancer son script :-D)
Planifier l’exécution d’un script Powershell sous Windows
L’idée quand on fait du scripting, peu importe sous quel langage, c’est pour gagner du temps en automatisant un processus, une tâche, qui peut être longue, fastidieuse ou redondante.
Planifier le lancement d’un script, en plein milieu de la nuit ou le week-end par exemple, tout simplement pour éviter de devoir le lancer à la main, peut doubler l’efficacité dudit script. Voyons ensemble comment faire cela !
Info + : Dans le cadre de ce post, je vais planifier l’exécution d’un tout petit script d’archivage de fichiers depuis un serveur. Attention cependant avec Powershell, il faut parfois modifier les stratégies d’exécution pour qu’un script fonctionne en dehors de ISE, un peu de lecture à ce sujet : Microsoft Doc Execution Policies |
On va commencer par ouvrir le « Planificateur de tâches » de Windows en le recherchant grâce à la zone de recherche ou en l’exécutant directement (touche Windows + R et saisir « taskschd.msc »).
Voici comment se présente la console du planificateur de tâches :
Certaines tâches sont déjà présentes dans le système d’exploitation ou bien elles viennent s’incrémenter lors de l’installation de logiciels qui en ont besoin. Dans le menu de gauche, cliquez sur « Bibliothèque du planificateur de tâches » pour avoir la vue ci-dessous.
Dans la liste de la partie centrale, cliquez sur le nom d’une tâche pour en voir apparaître la configuration en dessous :
Pour chaque tâche, il faudra définir des informations : quel compte utilisateur sera utilisé pour lancer la tâche, qu’est ce qui va déclencher cette tâche, à quel moment, sous quelles conditions et ce qu’elle fera précisément. Ceci se configure dans les différents onglets de la tâche (déclencheurs, conditions…).
Nous allons donc créer une nouvelle tâche et regarder ça de plus près !
Faites un clic droit dans la partie blanche au centre et cliquez sur « Créer une nouvelle tâche », que vous trouverez également dans le menu de droite du planificateur.
Info ++ : Vous pouvez choisir de « créer une tâche de base » plutôt que « créer une tâche », vous aurez juste moins d’options, ce qui n’est pas forcément pratique quand on veut faire les choses correctement… Pour ainsi dire, c’est une version « simplifiée » (qui a dit que c’était la version pour les noobs ? ) |
Pour commencer, on va renseigner les premières infos importantes dans l’onglet « Général », à savoir son nom et une petite description afin de facilement l’identifier.
Regardons maintenant les options de sécurité disponibles :
Vous pouvez ici sélectionner l’utilisateur (ou le groupe) qui sera en charge de lancer cette tâche et spécifier si cet utilisateur doit ou non être connecté au serveur lorsque la tâche sera exécutée (de préférence non comme cela pas besoin de laisser une session ouverte sur la machine…), et également définir si le mot de passe de ce compte doit être enregistré ou non en cochant la case « Ne pas enregistrer le mot de passe ».
Info ++ : Si la case « Ne pas enregistrer le mot de passe est cochée », cela signifie que la tâche ne pourra pas accéder à des ressources distantes, autrement dit, hébergées ailleurs que sur le serveur lui-même, ce qui peut être problématique selon ce que l’on veut faire ! |
Vous pouvez choisir également la version de l’OS pour laquelle la tâche sera lancée, si celle-ci doit être masquer dans la bibliothèque et si la tâche doit être « exécutée avec les autorisations maximales » ou non, c’est-à-dire avec des privilèges élevés.
Info ++ : Si la case « Exécuter avec les autorisations maximales » est cochée, la tâche sera lancée avec des privilèges élevés et sans demander de mot de passe mais attention, à utiliser avec parcimonie et uniquement quand c’est véritablement nécessaire… Lorsque c’est l’administrateur qui lance la tâche, les privilèges sont déjà élevés donc cette case ne servira pas. |
Dans mon cas et selon mon besoin, voici comment j’ai configuré l’onglet Général de ma nouvelle tâche, libre à vous de faire selon vos besoins :
Info + : Je précise que j’ai laissé le compte administrateur de mon domaine comme exécutant de cette tâche, mais en pratique, prévoir un utilisateur dédié à cela sans qu’il dispose de trop de pouvoir sur l’infrastructure complète peut être une meilleure idée. Il faudra cependant qu’il ait les droits nécessaires pour « Ouvrir une session en tant que tâche » (cela se configure via une stratégie de sécurité) mais aussi pour accéder à des ressources distantes si c’est nécessaire, sinon cela ne sera pas fonctionnel. Eventuellement, mettre cet utilisateur dédié dans le groupe Administrateurs (avec ou sans AD), est également possible mais c’est à vous de déterminer si cela est nécessaire ou non. |
Ensuite, nous allons définir un déclencheur pour cette nouvelle tâche. Allez dans l’onglet « Déclencheur » et cliquez sur « Nouveau ».
Nous allons ici déclarer quand notre tâche devra s’exécuter. A une certaine heure ? Au démarrage d’une machine ? A la connexion ? A vous de voir selon vos besoins. Personnellement, je reste sur « à l’heure programmée » pour le lancement de mon script.
Ensuite, on définit la fréquence à laquelle cette tâche sera exécutée. Pour moi, une fois par semaine tous les dimanches, à 2 heures du matin à partir d’une date précise (ici le 12/12/21) :
Au niveau des paramètres avancées juste en dessous, je vais seulement cocher la case « Arrêter la tâche si elle s’exécute plus de » et définir 2 heures car j’estime qu’au-delà, c’est qu’il y a un problème. Cela va éviter que la tâche ne tourne pour rien. Vous pouvez également ici mettre une date d’expiration afin de désactiver automatiquement ce déclencheur à partir d’une date précise.
Au final, voici mon déclencheur complet :
Cliquez sur OK pour voir le résultat suivant :
Si vous avez besoin de rajouter d’autres déclencheurs, vous pouvez refaire cette manipulation.
Ensuite on passe à l’onglet « Actions ». C’est ici que nous allons préciser à la tâche ce qu’elle devra faire, à savoir exécuter un script powershell. Cliquez sur « Nouveau ».
Mon action va donc consister à « Lancer un programme ». Ce programme ne sera autre que PowerShell. Dans le paramètre « Programme/script », saisissez « powershell.exe ». S’il s’agit d’un autre logiciel, cliquez simplement sur le bouton parcourir pour rechercher l’exécutable que vous souhaitez.
Il faut également indiquer à PowerShell ce qu’il doit lancer, sinon la console va simplement s’ouvrir et attendre gentiment qu’on lui dise quoi faire… Nous allons donc ajouter en argument « -File « E:\Scripts\nom_du_script.ps1 » ». Cela signifie pour powershell qu’il devra exécuter le fichier qu’on lui donne entre guillemets.
Cliquez sur OK pour valider votre action.
L’onglet « Conditions » peut être utile selon le besoin, je vous laisse juger par vous-même, dans mon cas la tâche sera lancée depuis un serveur qui sera forcément actif et relié au secteur donc je ne modifie rien ici.
Et nous allons terminer avec l’onglet « Paramètres » qui va nous permettre de gérer le comportement de cette tâche : Autoriser ou non son exécution en dehors de sa planification (lancement manuel), son comportement au cas où elle venait à échouer (recommencer x fois tout les x délais, arrêter si la tâche tourne plus de x temps, forcer son arrêt en cas de plantage), etc… Voici les paramètres que j’ai choisi :
J’autorise donc le lancement manuel de la tâche. En cas d’échec, je lui demande de retenter 1 heure plus tard mais maximum 2 fois. J’autorise également l’arrêt forcé mais je précise qu’il ne faut pas lancer plusieurs fois la tâche en parallèle mais plutôt l’arrêter complètement et la relancer.
Ma tâche est désormais prête, cliquez sur OK pour terminer. Saisissez les identifiants de l’utilisateur en charge d’exécuter la tâche :
Info ++ : Si vous êtes dans un domaine, ajoutez bien le nom de domaine et pas seulement le nom de l’utilisateur. |
La tâche est désormais active dans le planificateur de tâches du serveur. Pour la lancer manuellement, faites un clic droit dessus et cliquez sur Exécuter.
Info + : Si vous voyez la tâche en statut « En cours » alors qu’elle est simple et censée être rapide, faites simplement un petit « F5 » pour actualiser la vue du planificateur. |
Voilà, vous savez désormais comment créer complètement une tâche pour exécuter automatiquement un script, le tout en étant conscient des options possibles
C’est tout pour ce post, à la prochaine !