Oft werden Gruppenrichtlinien erstellt und auch modifiziert, wenn es Anforderungen gibt. Allerdings altern diese auch teilweise sehr schlecht in der Verzeichnisstruktur. Aus diesem Grund habe ich 2 Skripte erstellt, welche einen kleinen Überblick entsprechende Themen berücksichtigen:
Nicht verlinkte Gruppenrichtlinien
Gruppenrichtlinien werden an der Struktur der Domäne zur Verfügung bereitgestellt. Wenn man in dieser Struktur entsprechende Löschung, ob per Kontextmenü oder Taste „ENTF“, wird nur die Verlinkung gelöscht. Die Gruppenrichtlinie selbst bleibt in der Domäne vorhanden.
Mit diesem Skript können nicht mehr verlinkte Gruppenrichtlinien aufgelistet:
# Importieren des GroupPolicy-Moduls
Import-Module GroupPolicy
# Funktion zum Finden nicht verlinkter GPOs
function Get-UnlinkedGPOs {
# Abrufen aller GPOs
$allGPOs = Get-GPO -All
# Liste zum Speichern nicht verlinkter GPOs
$unlinkedGPOs = @()
# Schleife durch alle GPOs
foreach ($gpo in $allGPOs) {
# Abrufen aller Links für das aktuelle GPO
$links = Get-GPOLink -Guid $gpo.Id
# Überprüfen, ob keine Links existieren
if ($links.Count -eq 0) {
# Hinzufügen des GPO zur Liste nicht verlinkter GPOs
$unlinkedGPOs += $gpo
}
}
# Ausgabe der nicht verlinkten GPOs
foreach ($unlinkedGPO in $unlinkedGPOs) {
Write-Output "GPO '$($unlinkedGPO.DisplayName)';(ID: $($unlinkedGPO.Id));(ModifyDate: $($unlinkedGPO.whenmodified))"
}
}
# Aufruf der Funktion
Get-UnlinkedGPOs
Deaktivierte Gruppenrichtlinien
Gruppenrichtlinien sind in zwei Teilen aufgeteilt: Benutzer und Computer. Diese können allerdings auch beide deaktiviert werden. Somit ist eine Gruppenrichtlinie verlinkt, aber nicht mehr in der Verteilung. Diese Funktion kann zum Beispiel in Rollouts genutzt werden, um verschiedene Versionen auszutauschen.
Mit diesem Skript können deaktivierte Gruppenrichtlinien in der Domäne identifiziert werden.
# Importieren des GroupPolicy-Moduls
Import-Module GroupPolicy
# Funktion zum Finden von verlinkten GPOs, die deaktiviert sind
function Get-DisabledLinkedGPOs {
# Abrufen aller GPOs
$allGPOs = Get-GPO -All
# Liste zum Speichern deaktivierter, verlinkter GPOs
$disabledLinkedGPOs = @()
# Schleife durch alle GPOs
foreach ($gpo in $allGPOs) {
# Überprüfen, ob das GPO deaktiviert ist
if ($gpo.GpoStatus -eq "AllSettingsDisabled") {
# Abrufen aller Links für das aktuelle GPO
$links = Get-GPOLink -Guid $gpo.Id
# Überprüfen, ob Links existieren
if ($links.Count -gt 0) {
# Hinzufügen des GPO zur Liste deaktivierter, verlinkter GPOs
$disabledLinkedGPOs += $gpo
}
}
}
# Ausgabe der deaktivierten, verlinkten GPOs
foreach ($disabledLinkedGPO in $disabledLinkedGPOs) {
Write-Output "GPO '$($disabledLinkedGPO.DisplayName)' (ID: $($disabledLinkedGPO.Id));(ModifyDate: $($unlinkedGPO.whenmodified))"
}
}
# Aufruf der Funktion
Get-DisabledLinkedGPOs