Verwaiste GPOs finden mit PowerShell vor der Intune Migration

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.

Was this article helpful?
YesNo
0 0 votes
Article Rating
Abonnieren
Benachrichtige mich bei
guest
0 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments