Au fur et à mesure que l’organisation se développe, son environnement Active Directory (AD) et son infrastructure de Stratégie de Groupe (GP) avec l’objet de la Stratégie de Groupe (GPO) peuvent rapidement devenir incontrôlables. Les objets de stratégie de groupe (GPOs) peuvent rapidement devenir incontrôlables et, avant même de vous en rendre compte, vous vous retrouvez avec des dizaines de GPOs non liés qui encombrent votre environnement. Changeons cela.
Dans ce tutoriel, vous allez apprendre comment découvrir tous ces GPOs non liés à la fois avec la Console de Gestion de la Stratégie de Groupe (GPMC) et PowerShell.
Commençons !
Prérequis
Cet article sera un tutoriel avec des exemples pratiques. Si vous souhaitez suivre, assurez-vous d’avoir :
- Un domaine Active Directory. Cet article utilisera un domaine appelé HomeLab.Local.
- A Windows computer joined to the AD domain. This tutorial will use Windows 10.
- L’ordinateur Windows doit avoir le package Outils d’Administration de Serveur à Distance (RSAT) installé.
D’où viennent les GPOs non liés ?
Lorsque vous créez un GPO et définissez tous les paramètres que vous avez l’intention d’appliquer aux ordinateurs clients, ce GPO ne fait en réalité rien. Pour affecter réellement les ordinateurs clients, le GPO doit être lié à une unité organisationnelle (OU) AD.
Au fil du temps, et à mesure que davantage d’administrateurs créent des GPO, oublient de les lier, délient des GPO des OUs, ont l’intention de les supprimer mais ne le font jamais, les GPO inactifs peuvent proliférer. Surtout dans les grandes organisations, les GPO non liés peuvent se multiplier jusqu’à atteindre des centaines s’ils ne sont pas correctement entretenus.
Recherche des GPO non liés dans le GPMC
Vous pouvez trouver des GPO non liés de deux manières : via le GPMC ou via PowerShell. Si vous n’avez qu’une poignée de GPO non liés, il peut être judicieux d’utiliser le GPMC plutôt que de créer un script PowerShell.
Pour trouver des GPO non liés via le GPMC :
1. Ouvrez le GPMC en allant dans le menu Démarrer et en tapant « gestion de la stratégie de groupe ». Lorsque le programme GPMC apparaît, ouvrez-le.
2. Dans le GPMC, allez à Forêt : <votre nom de forêt> —> Domaines —> <votre nom de domaine>, faites un clic droit sur le nom de domaine et cliquez sur Rechercher. Cette action fera apparaître la boîte de dialogue Rechercher des objets de stratégie de groupe.

3. Cliquez sur la liste déroulante Rechercher l’élément et sélectionnez les liens GPO. Cet élément de recherche recherchera les GPO liés à une OU. Changez la liste déroulante Condition pour être Existe Dans et le domaine doit être votre domaine.
Dans la capture d’écran ci-dessous, la combinaison de ces paramètres recherchera tous les GPO liés à au moins une OU dans le domaine homelab.local.
Lorsque vous avez terminé, cliquez sur Ajouter pour ajouter le critère. Il apparaîtra sous la section Tous les critères de recherche.

4. Maintenant, cliquez sur le bouton Rechercher pour trouver tous les GPO correspondant aux critères de recherche.

5. Comme le montre la capture d’écran ci-dessous, seuls les GPO liés sont affichés dans les résultats de la recherche.

6. Pour trouver les GPO non liés, comparez maintenant manuellement tous les GPO avec les GPO liés comme indiqué ci-dessous. Dans la capture d’écran ci-dessous, seuls trois GPO sont liés. En regardant sous le nœud Objets de stratégie de groupe, vous pouvez voir que deux des GPO n’apparaissent pas (UnlinkedGPO1 et UnlinkedGPO2). Cela signifie qu’ils ne sont pas liés.
Cette tâche prendra du temps et c’est pourquoi vous verrez comment effectuer cette tâche via PowerShell dans la prochaine section.

Les GPO liés auront un lien lorsqu’ils sont attribués à un objet AD comme une OU, comme indiqué ci-dessous. Si vous n’avez que quelques GPO, vous pouvez rechercher les GPO qui ont un lien et ceux qui n’en ont pas. Les GPO qui n’ont pas de lien sont des GPO non liés.

Recherche des GPO non liés avec PowerShell
Parcourir les GPO dans le GPMC peut fonctionner pour quelques GPO, mais vous allez rencontrer des difficultés si vous en avez des centaines ou des milliers qui gèrent des milliers de points de terminaison. Dans ce cas, il est temps d’automatiser ce processus et de construire un outil PowerShell pratique.
En supposant que vous soyez sur votre PC Windows local joint au domaine avec RSAT installé :
1. Ouvrez une console Windows PowerShell.
2. Importez le module GroupPolicy. Le module GroupPolicy est livré avec RSAT et devrait déjà être installé sur votre système. Ce module contient toutes les commandes nécessaires pour travailler avec les GPO dans PowerShell.
3. Exécutez la cmdlet PowerShell Get-GPO
en utilisant le paramètre All
. Cette cmdlet interroge AD et renvoie toutes les GPO trouvées.

4. Maintenant que vous pouvez interroger toutes les GPO dans le domaine, vous devez maintenant déterminer lesquelles ne sont pas liées. Pour ce faire, exécutez la cmdlet Get-GPOReport
. Cette cmdlet vous permet de fournir un nom et un type de sortie à renvoyer.
Copiez et collez manuellement l’un des noms de GPO trouvés à l’étape précédente et exécutez cette commande. Vous verrez que la cmdlet renvoie un rapport XML de tous les paramètres de la GPO. En particulier, notez la section appelée LinksTo
, comme indiqué ci-dessous. Cette section contient le nœud XML SOMPath
qui représente le chemin vers l’OU auquel il est lié.

Le cmdlet
Get-GPOReport
ne peut obtenir un rapport que pour un seul GPO à la fois. Ce cmdlet n’inclut que les résultats de recherche des domaines et non des sites AD.
5. Maintenant que vous savez comment trouver tous les GPO avec Get-GPO
et le cmdlet pour découvrir à quoi ils sont liés (Get-GPOReport
), combinez-les en copiant et collant la commande PowerShell ci-dessous dans votre console.
La commande ci-dessous interroge tous les GPO dans le domaine (Get-GPO
) puis génère un rapport XML pour chacun d’eux (Get-GPOReport
), ne permettant que ceux qui n’ont pas de chaîne <LinksTo>
dans le rapport (Select-String
) à être retournés.
Dans l’environnement du tutoriel, vous pouvez voir dans l’exemple ci-dessous que UnlinkedGPO1 et UnlinkedGPO2 ne sont liés à aucun OU.

Construction d’un outil PowerShell pour les GPO non liés
Maintenant, mettons tout ce que vous avez appris ensemble et construisons un script PowerShell que vous pourriez utiliser dans le monde réel.
1. Ouvrez votre éditeur de code préféré et copiez/collez le script PowerShell suivant dedans. Enregistrez le script sous Remove-UnlinkedGPO.ps1. Ce script :
- Crée un dossier avec la date actuelle pour stocker les rapports de GPO non liés.
- Recherche tous les GPO dans AD qui ne sont pas liés.
- Crée un rapport HTML pour chaque GPO non lié et l’enregistre sur le disque.
- Crée et ajoute à un fichier texte une liste de tous les GPO non liés.
- Supprime chaque GPO non lié avec une étape de confirmation en utilisant le cmdlet
Remove-GPO
.
Vous pouvez également télécharger le script Remove-UnlinkedGPO.ps1 via GitHub.
2. Exécutez le script Remove-UnlinkedGPO.ps1.
3. Si un GPO non lié est trouvé, le script vous demandera de le supprimer. Cette invite provient de la commande Remove-GPO
en utilisant l’interrupteur Confirm
. Pour confirmer la suppression de ce seul GPO, cliquez sur Oui, sinon, cliquez sur Oui à tout pour supprimer tous les GPO non liés sans autre confirmation.

Après l’exécution du script et s’il trouve au moins un GPO non lié, vous devriez voir dans le dossier C:\GPOBackup\<date> le contenu du GPO sous forme de dossier GUID ainsi que les rapports HTML et le fichier UnlinkedGPOs.txt.

4. Maintenant, ouvrez l’un des rapports HTML de GPO avec un navigateur web. Vous pouvez voir ci-dessous que le rapport contient tous les paramètres définis dans ce GPO. Dans l’exemple ci-dessous, le GPO UnlinkedGPO1 contient des paramètres pour la stratégie d’exécution PowerShell.

5. Enfin, ouvrez le fichier UnlinkedGPOs.txt. Vous verrez ci-dessous qu’il contient la même sortie que celle que vous avez reçue de la commande Get-GPO
.

Conclusion
Vous devriez maintenant savoir comment trouver tous ces GPO non liés dans votre environnement AD en utilisant le GPMC et PowerShell.
Quelle méthode préférez-vous ? Pouvez-vous penser à un moyen d’améliorer le script PowerShell présenté ?