The estimated reading time 2 minutes
Einige Unternehmen sind sicherlich schon komplett auf Endpoint Management Intune umgestiegen und benötigen keine GPOs mehr. Andere sind gerade in den Vorbereitungen, deshalb möchte ich hier eine kleine Hilfestellung für verwaiste Gruppenrichtlinien Objekte geben. Diese lassen sich relativ einfach per PowerShell finden und falls notwendig auch gleich entfernen.
Hierzu habe ich ein kleines Script geschrieben, welches alle GPOs in eine CSV exportiert, die auf keine OU/Site verknüpft sind. Im Normalfall werden solche GPOs auch nicht angewendet. Speziell in größeren Umgebungen mit vielen GPOs verliert man oftmals den Überblick und kann mit diesem Skript zumindest mal alte Objekte entfernen ohne größeren Impact.
Benötigt wird eigentlich nur die PowerShell mit dem „GroupPolicy“ Modul. Siehe hierzu auch den offiziellen Link:
https://learn.microsoft.com/en-us/powershell/module/grouppolicy/?view=windowsserver2022-ps
Sollte das Modul auf dem Management Server nicht vorhanden sein, kann dies über den Servermanager oder via PowerShell nachinstalliert werden.
Das Skript selber benötigt nur den Pfad für die CSV Exportdatei.
Import-Module GroupPolicy -Verbose $csvpath = "C:\temp\2024-07-04-GPOs-notlinked.csv" $gpos = (get-gpo -All | Sort-Object displayName) "Name;ID;Created;LastModified;GpoStatus" | Out-File -FilePath $csvpath -Encoding utf8 -Force foreach($gpo in $gpos){ $gpoid = ($gpo).id $gpodisplayname = ($gpo).Displayname $gpocreat = ($gpo).CreationTime $gpomod = ($gpo).ModificationTime $gpostatus = ($gpo).GpoStatus $report = Get-GPOReport -Guid $gpoid -ReportType Xml if ($report | Select-String -notmatch "<LinksTo>"){ Write-Host "$gpodisplayname not linked" "$gpodisplayname;$gpoid;$gpocreat;$gpomod;$gpostatus" | Out-File -FilePath $csvpath -Encoding utf8 -Append } }
Der CSV Export sieht dann folgendermaßen aus:
Diese CSV kann auch verwendet werden um die GPOs aus dem AD zu löschen. Hierzu habe ich auch ein kleines Skript erstellt. In diesem muss nur in der vorletzten Zeile der FQDN der Domäne eingefügt werden. Wenn man sich dann sicher ist, noch das „-WhatIf“ entfernen dann werden die GPOs gelöscht.
$impgpos = Import-Csv -Delimiter ";" -Path $csvpath -Encoding UTF8 foreach($impgpo in $impgpos){ $impgponame = ($impgpo).Name $impgpoid = ($impgpo).id Write-Host "Removing GPO: $impgponame" -ForegroundColor Yellow Remove-GPO -Guid $impgpoid -Domain XXXXX.local -Confirm:$false -WhatIf }
Viel Erfolg bei der Suche nach verwaisten Einträgen und Objekten. Hat euch der Artikel gefallen, dann drückt bitte auf „Helpful“, andern falls gerne einen Kommentar da lassen.