30/09/2024

PowerShellStratégie de groupe

Windows – Exécuter un script PowerShell en tant que tâche planifiée immédiate avec une GPO

I. Présentation

L'exécution d'un script PowerShell à partir d'une stratégie de groupe n'implique pas nécessairement le redémarrage de la machine. Il existe une méthode, basée sur la création d'une tâche planifiée à exécution immédiate, qui permet d'exécuter un script PowerShell (ou un autre programme) de façon très rapide sur un poste de travail Windows ou une machine Windows Server. C'est ce que nous allons voir dans ce tutoriel.

Lors de l'utilisation d'une GPO pour exécuter un script PowerShell, la méthode la plus fréquemment utilisée est l'exécution d'un script au démarrage de l'ordinateur. Ceci implique de redémarrer l'ordinateur, d'une part pour appliquer la stratégie de groupe, et d'autre part pour que le script soit exécuté puisqu'il s'exécute au démarrage (ou à l'arrêt, selon le paramètre sélectionné).

Néanmoins, c'est contraignant puisqu'un redémarrage implique potentiellement une interruption de service et une perturbation. Cela est vrai qu'il s'agisse de redémarrer un serveur ou un poste de travail.

Lorsqu'un administrateur a besoin d'exécuter un script PowerShell (ou un autre programme) rapidement sur une machine, dans le cadre d'une opération de remédiation, comment faire ? Surtout, comment faire à partir des outils natifs de l'Active Directory et sans recourir à des solutions annexes ? La réponse se cache dans les stratégies de groupe.

II. Sélection du script PowerShell à exécuter

Avant de pouvoir planifier l'exécution d'un script PowerShell, nous devons tout d'abord déterminer quel est ce script. Dans le cas présent, nous allons prendre l'exemple de la désactivation d'IPv6 sur Windows, afin de se protéger contre les vulnérabilités associées. Cette phrase fait écho à ce précédent article :

Nous utiliserons les scripts présents sur ce dépôt GitHub :

Le script à exécuter doit être hébergé sur un emplacement réseau pour être accessible aux machines. L'alternative serait de le copier sur chaque machine (via GPO également), mais ce n'est pas la méthode que je préfère : on évitera d'éparpiller le script un peu partout.

III. Créer la tâche immédiate par GPO

La prochaine étape consiste à configurer la stratégie de groupe pour exécuter notre script PowerShell en tant que tâche immédiate. Voici comment procéder.

Ouvrez la console de gestion des stratégies de groupe (GPMC). Ensuite, créez une stratégie de groupe. Pour ma part, je crée une GPO sur l'OU "PC" à partir d'un clic droit et de l'option "Créer une GPO dans ce domaine, et le lier ici…". Cette GPO sera nommée "Sécurité - Windows - Désactiver IPv6".

Une fois la GPO sélectionnée, effectuez un clic droit dessus et sélectionnez "Modifier" pour passer à la phase de configuration.

Dans l'éditeur de stratégie de groupe, naviguez vers :

  • Configuration ordinateur > Préférences > Paramètres du Panneau de configuration (1)

Puis, cliquez droit (2) afin de mettre votre souris sur "Nouveau" (2) et de cliquer sur l'option "Tâche immédiate (au minimum Windows 7)".

Commençons par la configuration de l'onglet "Général".

  • Indiquez un nom et une description
  • Cochez l'option "Exécuter avec les privilèges les plus élevés" car il s'agit d'une tâche d'administration qui nécessite des permissions élevées.
  • Définissez l'option "Configurer pour" sur la valeur "Windows 7, Windows Server 2008 R2" pour avoir accès aux paramètres les plus récents.

Ensuite, vous devez définir le compte avec lequel va s'exécuter la tâche planifiée. Si votre script a besoin des permissions administrateur, indiquez alors "NT AUTHORITY\SYSTEM", qui est le niveau de permission le plus élevé. N'hésitez pas à faire un copier-coller de cette valeur, car elle doit être écrite de cette façon. De plus, cochez l'option "Exécuter même si l'utilisateur n'est pas connecté".

Remarque : si vous indiquez une valeur incorrecte, l'erreur 0x80070534 sera renvoyée par cette tâche. Ce code d'erreur sera notamment visible lors d'une analyse avec l'outil gpresult.

Pour la suite de la configuration :

1 - Passez sur l'onglet "Actions". C'est ici qu'il va falloir déclarer le script PowerShell à exécuter.

2 - Cliquez sur le bouton "Nouveau".

3 - Choisissez l'action "Démarrer un programme".

4 - Indiquez "powershell.exe" comme nom de programme (nous pourrions choisir autre chose, dans un autre cas d'usage).

5 - Ajoutez les arguments nécessaires pour outrepasser la politique d'exécution (si nécessaire) et spécifier le chemin vers le script.

-ExecutionPolicy Bypass -File "\\IT-CONNECT.LOCAL\sysvol\it-connect.local\scripts\IPv6\Manage-IPv6.ps1"

6 - Cliquez sur "OK".

Enfin, vous pouvez basculer sur l'onglet "Commun" pour cocher l'option "Appliquer une fois et ne plus réappliquer". Ceci est utile pour une exécution unique de ce script, puisqu'il n'a pas vocation à être exécuté plusieurs fois.

Si vous avez l'habitude de créer des tâches planifiées, vous remarquerez l'absence de l'onglet "Déclencheurs" : vous ne pouvez pas choisir quand sera exécuté le script. En fait, c'est une tâche immédiate, donc il sera exécuté ASAP sur les machines ciblées : dès qu'elles vont récupérer la GPO.

Validez, votre tâche apparaît bien dans la liste. Si vous souhaitez intégralement appliquer le scénario de désactivation d'IPv6, créez une seconde tâche pour le second script.

La GPO est prête, il ne reste plus qu'à tester.

IV. Tester la configuration

Si tout est correctement configuré, notre script PowerShell devrait s'exécuter comme prévu, et nous aurons réussi à automatiser cette tâche sur plusieurs machines via la stratégie de groupe.

Si vous êtes curieux, rendez-vous dans le "Planificateur de tâches" de la machine sur laquelle la GPO s'applique. Ici, vous devriez voir votre tâche planifiée :

En principe, cette tâche s'est même déjà exécutée ! Il vous suffit de vérifier que le script a bien effectué les actions attendues pour vous en convaincre... En complément, naviguez dans l'Observateur d'événements de la machine, au sein du journal "Windows PowerShell". Un événement avec l'ID 800 doit faire référence à l'exécution du script, comme ceci :

Tout fonctionne à merveille ! Il est à noter que lors de la prochaine synchronisation des GPO, la tâche planifiée sera automatiquement supprimée de la machine.

V. Conclusion

Ce tutoriel vous a montré comment configurer l'exécution de scripts PowerShell en tant que tâches immédiates, en utilisant une fonction méconnue des stratégies de groupe. Cette méthode est intéressante pour automatiser des tâches sur plusieurs machines, sans être dépendant d'un reboot. Elle peut rendre bien des services lorsque l'on est dénué d'outils complémentaires capables de le faire (SCCM, Intune, etc.). Vous pouvez maintenant adapter cette technique à vos besoins !

N'hésitez pas à commenter cet article ou à vous connecter à notre Discord si vous avez une question.

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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.