Articles Tagués ‘GPO Tips & Tricks’

 

Aujourd’hui, nous allons découvrir une technique qui va vous permettre d’optimiser votre infrastructure G(roup) P(olicy) O(bjects) : scanner, détecter, lister et supprimer toutes les GPOs « Orphelins/Non Linkés »

 

HowTo : Lister les GPOs Orphelins

Commencez par importer le module PowerShell GroupPolicy en exécutant la commande suivante :

Import-Module GroupPolicy

Pour collecter des informations sur toutes les GPOs, le paramètre -All est utilisé avec la Cmd-let Get-GPO.

Nous exportons ensuite le résultat vers un fichier XML qui sera traité et analysé pour savoir quelle GPO n’as pas de Link vers des OUs (sous-OUs) ou Domaine AD : lecture du fichier XML ligne par ligne pour connaitre les lignes sans le mot « LinkTo »

So, CTRL+C /CTRL+V la commande suivante et notez le résultat :

Get-GPO -All | Sort-Object displayname | Where-Object {If ( $_ | Get-GPOReport -ReportType XML | Select-String -NotMatch « <LinksTo> » ) {$_.DisplayName }}

Si vous souhaitez avoir un output au format tableau, exécutez la commande suivante :

Get-GPO -All | Sort-Object displayname | Where-Object {If ( $_ | Get-GPOReport -ReportType XML | Select-String -NotMatch « <LinksTo> » ) {$_.DisplayName }} | ft -AutoSize

Pour optimiser le résultat (Output), nous allons dans l’exemple suivant, afficher uniquement les deux valeurs des deux attributs suivants :

  • DisplayName (Nom d’affichage)
  • ID (GUID* de la GPO)

 

*: GUID pour Globally Unique IDentifier

Pour ce faire, exécutez la commande suivante :

Get-GPO -All | Sort-Object displayname | Where-Object {If ( $_ | Get-GPOReport -ReportType XML | Select-String -NotMatch « <LinksTo> » ) {$_.DisplayName }} | select DisplayName,Id | ft -AutoSize

Nous allons maintenant exécuter la commande suivante pour connaître le nombre de GPO non linkés (à aucun Domaine ou OU/sous-OUs) :

(Get-GPO -All | Sort-Object displayname | Where-Object {If ( $_ | Get-GPOReport -ReportType XML | Select-String -NotMatch « <LinksTo> » ) {$_.DisplayName }}).Count

Dans mon cas, 11 GPOs au total sont actuellement stockées/hébergées dans mon annuaire AD (HKCorp.Lan : AD de LAB o_O) alors qu’elles sont ni Linkées au Domaine (HKCorp.Lan) ni aux OUs ou sous-OUs !

Pour confirmer le résultat obtenu, je vais simplement lancer l’outil/console GPMC.msc (Group Policy Management Console) et vérifier le Scope de la GPO HKCRP-POC-LAPS (GPO retournée par la commande comme étant « Orphelin ») :

Comme montré dans la screenshot ci-dessus, le scope de la GPO HKCRP-POC-LAPS est en effet vide, cela veut simplement dire que cette GPO n’a aucun Link. Cela confirme donc le résultat retourné par la commande PS ci-haut.

HowT: GPO Orphelins – Reporting

Si vous souhaitez « Journaliser » et exporter la liste des GPOs Orphelins retournés par les commandes PS précédentes, vous pouvez exécuter les commandes suivantes :

Export vers un fichier texte (.TXT File)

Get-GPO -All | Sort-Object displayname | Where-Object {If ( $_ | Get-GPOReport -ReportType XML | Select-String -NotMatch « <LinksTo> » ) {$_.DisplayName }} | Out-File C:\GPO_Orphs.txt

Vers un fichier CSV (.CSV File)

Get-GPO -All | Sort-Object displayname | Where-Object {If ( $_ | Get-GPOReport -ReportType XML | Select-String -NotMatch « <LinksTo> » ) {$_.DisplayName }} | Export-CSV C:\GPO_Orphs.csv

HowTo : Supprimer les GPOs « Orphelins »

Si après vérification, vous confirmez qu’effectivement les GPOs non linkés remontés par les commandes PS sont « obsolètes » et n’ont simplement plus besoin d’exister dans votre annuaire AD, vous pouvez les supprimer directement depuis le snap-in GPMC.msc ou en exécutant la commande suivante :

Get-GPO -All | Sort-Object displayname | Where-Object {If ( $_ | Get-GPOReport -ReportType XML | Select-String -NotMatch « <LinksTo> » ) {$_.DisplayName }} | Remove-GPO 

je vous recommande tout de même de sauvegarder toutes les GPOs Orphelins avant de les supprimer (histoire d’avoir un moyen de Rollback :)), cela peut être réalisé en exécutant les commande suivantes.

Dans l’exemple suivant, je vais sauvegarder mes 11 GPOs dans C:\GPO_Backups

$Emplacement_GPOsBackup = « C:\GPO_Backups »

Get-GPO -All | Sort-Object displayname | Where-Object {If ( $_ | Get-GPOReport -ReportType XML | Select-String -NotMatch « <LinksTo> » ) {$_.DisplayName }} | Backup-GPO -Path $Emplacement_GPOsBackup

Une entrée par GPO « sauvegardée » vous est retournée :

Les fichiers de Backups (11 au total pour les 11 GPOs) sont générés et stockés dans l’emplacement spécifié lors de l’exécution de la commande (C:\GPO_Backups » :

 

Note importante

Comme mentionné à plusieurs reprises dans ce post, les techniques expliquées ici ne couvrent pas les GPOs linkées au niveau site AD.

Notez donc que les résultats qui vont vous être retournés après exécution des différentes commandes concernent uniquement les GPOs Orphelins non « Linkées » au Domaine AD ou OUs et sous-OUs.

J’espère que cette technique pourra vous être utile lors de la réalisation de vos audits AD/GPOs.

Keep in touch, d’autres HowTo GPOs arrivent prochainement :).

#HK

Publicités

 

Hello GPO Guys,

Une « Trick » sur les GPOs qui peut vous être utile si vous faites régulièrement des audits GPOs.

J’ai récemment audité une infrastructure système « Windows Server 2012 R2 /2016 » assez complexe avec un peu plus de 1000 GPOs implémentées.

La phase /Step 1 de mon audit GPO était de lister et supprimer (après validati/on du client) toutes les GPOs vides, le but étant de réduire rapidement le nombre de GPOs de domaine « inutiles » (MAIS qui sont quand même répliquées dans tous les sens, lors de la réplica AD ^-^).

Alors comment ça marche ?

Lancez PowerShell ISE depuis un D(omain) C(ontroller) ou une machine d’administration ayant les outils RSAT ADDS installés et Copiez /Collez le bloc de code PS suivant :


$GPOVides = Get-GPO -All
foreach ($item in $GPOVides)
{
if ($item.Computer.DSVersion -eq 0 -and $item.User.DSVersion -eq 0)
{
write-host $item.DisplayName est vide !
}
}


Dans l’exemple suivant, le script me retourne les GPOs listées ci-dessous :

Notez que ce script PS est disponible en téléchargement gratuit sur la Gallery TechNet.

Téléchargez-le ici.

A bientôt

HK T___T