Présentation
Dans ce tutoriel, je vais vous expliquer comment exécuter un script PowerShell à l’ouverture session d’utilisateur à l’aide d’une stratégie de groupe (GPO) dans un environnement Active Directory.
Avant de commencer ce tutoriel, voici quelques considérations à prendre en compte lors de l’exécution de script à l’ouverture de session :
- Le script est exécuté dans le contexte de l’utilisateur, vous ne pourrez donc pas installer de logiciel si l’utilisateur n’est pas administrateur de l’ordinateur
- Les scripts sont exécutés après un délai de l’ouverture de session, par exemple si vous mappez un lecteur réseau, cela peut prendre quelques secondes avant de la voir.
Dans ce tutoriel, je vais utiliser un script assez simple, il va juste créer une entrée dans l’observateur d’événement Windows.
Avant de déployer un script PowerShell par stratégie de groupe, assurez vous de son bon fonctionnement avec des tests locaux et avant de le déployer à grande échelle, faite également des tests de la stratégie de groupe sur un OU de tester par exemple.
Exécuter un script PowerShell à l’ouverture de session par stratégie de groupe
Avant de créer la stratégie de groupe, copier le script sur le serveur.
Depuis la console Gestion de stratégie de groupe, faire un clic droit sur Objets de stratégie de groupe et cliquer sur Nouveau 1.
Nommer la stratégie de groupe 1 et cliquer sur OK 2 pour la créer.
L’objet stratégie de groupe est créé, faire un clic droit dessus et cliquer sur Modifier 1.
Aller à l’emplacement suivant : Configuration utilisateur / Stratégies / Paramètres Windows / Script (ouverture et fermeture de session), faire double clic sur Ouverture de session 1 pour accéder aux propriétés.
Aller sur l’onglet Scripts PowerShell 1 et cliquer sur Afficher les fichiers 2.
Dans la fenêtre de l’explorateur de fichiers qui s’ouvre, copier le script PowerShell.
Fermer la fenêtre de l’explorateur de fichiers et retourner sur la fenêtre des propriétés, cliquer ensuite sur le bouton Ajouter 1.
Sur la nouvelle fenêtre d’Ajout d’un script, cliquer sur le bouton Parcourir 1.
Sélectionner le fichier du script PowerShell 1 puis cliquer sur le bouton Ouvrir 2.
Le script PowerShell à ajouter est sélectionné, cliquer sur OK 1.
Le script PowerShell est ajouté au script d’ouverture de session, il est possible d’ajouter plusieurs scripts si vous le souhaitez, pour cela répéter l’opération, personnellement je préfère faire plusieurs GPO, cela est plus facile à maintenir dans le temps et surtout si on souhaite arrêter l’application d’un script temporairement, il suffit désactiver la stratégie de groupe.
Cliquer sur les boutons Appliquer 1 et OK 2.
Fermer maintenant l’éditeur de stratégie de groupe.
La GPO est prête.
Maintenant, il faut lier la stratégie de groupe à l’emplacement souhaité dans l’arborescence du domaine Active Directory, pour le moment elle se trouve dans le conteneur Objets de stratégies de groupe qui est la « bibliothèque » de toutes les GPO.
Faire un clic droit à l’endroit souhaité et cliquer sur Lier un objet de stratégie de groupe existant 1.
Ici, je vais lier la GPO à l’Unité d’Organisation Utilisateurs afin que le script soit appliqués à tous les utilisateurs de cette OU.
Dans la liste, sélectionner la GPO 1 et cliquer sur OK 2.
Tester la stratégie de groupe et l’exécution du script PowerShell
Ici, je vais ouvrir la session de l’utilisateur Iron MAN (iron.man).
Voici la page de connexion avec l’utilisateur Iron MAN.
Dans l’observateur d’événement Windows, je trouve bien l’entrée créée par le script PowerShell.
Vous savez maintenant comment exécutera un script PowerShell à l’ouverture de session à l’aide d’une stratégie de groupe.
Avec l’expérience, voici quelques conseilles supplémentaires :
- Signer les scripts PowerShell, cette fonctionnalité va permettre de sécuriser les scripts exécutés et empêcher leur altération.
- Héberger les scripts de une instances Gitlab interne et faites des appels de scripts distant (je vous explique en dessous)
Avec PowerShell, il est possible d’exécuter des scripts distants qui vont être télécharger en https, c’est là que Gitlab va prendre tout son intérêt en hébergeant les scripts dessus, qui va permettre d’avoir une gestion centralisé des scripts PowerShell et bénéficier du versioning. L’autre avantage, c’est la mise à jour quasiment instantané du script, il n’y a pas besoin d’attendre la réplication du dossier sysvol.
Voici comment procéder, dans un premier temps récupérer l’url du script PowerShell au format raw.
Créer un script PowerShell pour la stratégie de groupe avec le code suivant :
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://git.uri/-/snippets/xx/raw/main/ScriptPSOnLogin.ps1'))
ou mais moins sécurisé :
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://git.uri/-/snippets/xx/raw/main/ScriptPSOnLogin.ps1'))
L’utilisation de Gitlab n’empêche pas la signature des scripts PowerShell.