08/09/2024

PowerShellStratégie de groupe

Identifier et supprimer les GPO sans liaison avec PowerShell

I. Présentation

Lorsque l'on administre, audit, ou reprend la gestion d'une infrastructure basée sur un environnement Microsoft et plus particulièrement un Active Directory, on se retrouve forcément confronté à la gestion des GPO. En fonction du nombre qu'il y en a, cela peut représenter un joli sac de noeuds, il est donc intéressant d'être en mesure d'identifier les GPO "Unlinked" c'est-à-dire les GPO sans liaison.

Une GPO sans liaison n'ayant pas d'utilité puisqu'elle ne s'appliquera sur aucun utilisateur, aucun ordinateur. Un bon moyen de commencer à faire du tri dans l'infrastructure en question.

Il existe des ressources sur Internet à ce sujet, pour ma part, je suis parti d'un script existant que l'on retrouve sur la galerie Microsoft et qui se nomme "Get-UnlinkedGPO". Ce script va lister les GPO sans liaison grâce à la propriété "GPO.LinksTo" du cmdlet Get-GPOReport qui sert à obtenir les liaisons d'une GPO. Le nombre total de GPO unlinked va s'afficher également.

Vous pouvez le récupérer en cliquant sur le lien ci-dessous, il suffit de l'exécuter ensuite pour identifier les stratégies de groupe sans liaison ?

? Get-UnlinkedGPO

II. Supprimer les GPO sans liaison

Pour la suite, je vous propose de reprendre le script téléchargé précédemment, que l'on va faire évoluer pour apporter deux actions supplémentaires :

  • La sauvegarde de chaque GPO sans liaison
  • La suppression de chaque GPO sans liaison

Commençons par stocker dans une variable $DC le nom du contrôleur de domaine ciblé pour l'exécution des différentes commandes.

$DC = "SRV-DC.it-connect.local"

Ensuite, je vous propose le bout de code ci-dessous pour traiter chaque GPO sans liaison identifiée par la première phase du traitement (correspondante au script que l'on a récupéré sur le site Microsoft). Le nom des différentes GPO unlinked étant stockés dans la variable $unlinkedGPOs.

? Note : ce bout de code est à ajouter à la suite du script téléchargé précédemment.

Pour chaque GPO, nous allons réaliser une sauvegarde grâce à la commande Backup-GPO (dans le dossier "C:\GPO_Backup") et si la sauvegarde s'effectue correctement, nous procédons à sa suppression via la commande Remove-GPO. Un retour dans la console est effectué à chaque fois.

Foreach($GPO in $unlinkedGPOs){

  Write-Host "Traitement de la GPO : $($GPO.DisplayName) ($($GPO.Id))"

  $Error.Clear()

  Backup-GPO -Guid $GPO.Id -Path "C:\GPO_Backup" -Server $DC -ErrorVariable BackupGPOState

  if($error.Count -ieq 0){

    Write-Host "Suppression de la GPO : $($GPO.DisplayName) ($($GPO.Id))" -ForegroundColor Green
    Remove-GPO -Guid $GPO.Id -Server $DC

  }else{

    Write-Host "Echec lors de la suppression de la GPO : $($GPO.DisplayName) ($($GPO.Id))" -ForegroundColor Red

  }
}

Pour chaque GPO traitée, une sortie de ce type sera affichée dans la console :

Traitement de la GPO : Ma_GPO_01 (ff26da7e-5544-45b0-bf45-6689f9d81670)
DisplayName : Ma_GPO_01
GpoId : ff26da7e-5544-45b0-bf45-6689f9d81670
Id : 3592da82-89a4-4000-ae28-6087963b0954
BackupDirectory : C:\GPO_Backup
CreationTime : 11/03/2020 21:38:43
DomainName : it-connect.local
Comment :

Suppression de la GPO : Ma_GPO_01 (ff26da7e-5544-45b0-bf45-6689f9d81670)

Voilà, avec ces quelques lignes de code, vous allez pouvoir réaliser un premier niveau de nettoyage au sein de vos GPO, sans perdre la possibilité de les récupérer si besoin puisque nous prenons le soin de les sauvegarder.

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

1 commentaire sur “Identifier et supprimer les GPO sans liaison avec PowerShell

  • Bonjour Florian,
    Tout à l’heure sur un PC j’ai remarqué qu’il y’avait un filtre que j’avais mis en place pour bloquer une application via GPO et que cette GPO n’existe plus sur mon serveur.
    J’aimerais savoir comment le (filtre) supprimer de ce PC, il n’est certainement pas le seul.
    Dois-je re-créer une GPO avec le même nom sur mon serveur ?

    Merci d’avance de votre retour.

    Répondre

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.