WavebreakmediaMicro - Fotolia
Active-Directory-Pflege: Alte GPOs, Gruppen und Benutzerkonten löschen
Zur Active-Directory-Pflege gehört auch das Löschen veralteter Einträge. Per PowerShell lassen sich ungenutzte GPOs und Benutzerkonten entfernen.
Das Active Directory (AD) ist in vielen Unternehmen eine der kritischsten Unternehmenskomponenten. So ziemlich jede Anwendung und jeder Endanwender hängen von dem Authentifizierungs- und Autorisierungsdienst ab. In größeren Konzernen kann ein Active Directory zehntausende Benutzerkonten, Gruppen, Organisationseinheiten und Gruppenrichtlinienobjekte (Group Policy Object, GPO) enthalten. Seine Datenbank umfasst dann auch hunderttausende Objekte wie Anwender, Drucker oder Computer. Und all diese Daten sorgen über kurz oder lang für Unordnung.
Jedes Unternehmen hat irgendeine Art an Altlast im Active Directory: leere Gruppen, die nicht mehr benötigt werden, ungenutzt Gruppenrichtlinienobjekte oder verwaiste Benutzerkonten. Bei einem Datenbank-Update sollte daher als Teil guter Datenbankpflege auch immer eine Aufräumaktion des Active Directory eingeplant werden. Ein Update ist immer ein guter Zeitpunkt, um Altlasten loszuwerden, die sich über die Jahre angesammelt haben. Bei vielen Unternehmen gehört das Säubern des Active Directory sogar zum Wartungsumfang, um die Datenbank mit optimaler Leistung betreiben zu können.
Bevor man mit dem Aufräumen beginnt, muss ein Rechner des Administrators in der abzufragenden Domäne sein, zusätzlich müssen auf dieser Maschine die Microsoft Remote Server Administration Tools (RSAT) installiert sein.
Nicht verlinkte GPOs des Active Directory eliminieren
GPOs können durch ihre hierarchische Natur ziemlich unhandlich werden. Mit der Zeit können Gruppenrichtlinien miteinander in Konflikt geraten, oder sie können an einigen Orten deaktiviert, an anderen aber wieder aktiviert sein. Geradezu typisch für Active-Directory-Altlasten sind nicht-verlinkte GPOs. Diese GPOs haben keine Verbindung mehr zu einer Organisationseinheit und dienen keinem anderen Zweck mehr, als Platz in der Active-Directory-Datenbank zu verbrauchen.
Um solche GPOs zu finden, kann das PowerShell-Cmdlet Get-GPOReport verwendet werden, das mit dem PowerShell Active Directory Modul installiert wird. Anders als Get-GPO geht dieses Cmdlet tiefer und zieht die meisten der Einstellungen in einer einzelnen – oder allen – GPOs in einer Domäne.
Die GPOs einer Domäne sollten idealerweise im XML-Format vorliegen. Die Nutzung von XML ermöglicht die Punktnotation zur Angabe bestimmter Eigenschaften. Mit dem folgenden Befehl erhält man alle GPOs im XML-Format:
$gpoReport = [xml](Get-GPOReport -All -ReportType XML)
Als Nächstes werden die GPOs mit einem Nullwert für das Feld LinksTo herausgefiltert. Damit werden alle nicht-verlinkten GPOs der Domäne angezeigt:
@($gpoReport.GPOs.GPO).where({ -not $_.LinksTo })
Um die nicht-verlinkten GPOs zu entfernen, wird nun das Pipe-Symbol und Remove-GPO mit dem WhatIf-Parameter verwendet. Wenn das Ergebnis gut aussieht, wird der WhatIf-Parameter entfernt, um diese Objekte zu löschen.
@($gpoReport.GPOs.GPO).where({ -not $_.LinksTo }) | Remove-Gpo –WhatIf
Weitere Artikel zum Active Directory:
Tool-Tipp: Aufräumen mit ADSI Edit.
Neues für das Active Directory in Windows Server 2016.
Welche Rolle spielen Active-Directory-Funktionsebenen heute noch?
Leere Active-Directory-Gruppen entfernen
Eine weitere typische Altlast in Active-Directory-Datenbanken sind leere Gruppen. Diese können sich aus verschiedenen Gründen ansammeln, etwa aufgrund von Testszenarien.
Zunächst lässt man sich hierfür alle leeren Gruppen ausgeben. Hierfür wird das Cmdlet Get-AdGroup zusammen mit dem where-Filter verwendet.
@(Get-ADGroup -Filter * -Properties isCriticalSystemObject,Members).where({ (-not $_.isCriticalSystemObject) -and ($_.Members.Count -eq 0) })
Um die leeren Gruppen zu entfernen, kommt erneut das Pipe-Symbol für eine Weitergabe der Ergebnisse an Remove-Adgroup zum Einsatz.
@(Get-ADGroup -Filter * -Properties isCriticalSystemObject,Members).where({ (-not $_.isCriticalSystemObject) -and ($_.Members.Count -eq 0) }) | Remove-AdGroup –WhatIf
Löschen ungenutzter Active-Directory-Benutzerkonten
Diese Aufräumarbeit entfernt ungenutzte Benutzerkonten – das sind ausgelaufene, deaktivierte oder seit 120 Tagen nicht mehr genutzte Benutzerkonten des Active Directory. Diese Konten können mit Hilfe des Cmdlets Search-ADAccount gefunden werden. Mit diesem Cmdlet lassen sich alle Kategorien von Benutzerkonten mit jeweils nur einer einzigen Zeile ermitteln.
Search-ADAccount -AccountInactive -TimeSpan 120 -UsersOnly
Search-ADAccount -AccountDisabled –UsersOnly
Search-ADAccount -AccountExpired –UsersOnly
Diese Anweisungen können auch konsolidiert und die Ergebnisse in einer kommaseparierten Textdatei (Comma Separated Values, CSV) ausgegeben werden:
$inactiveAccounts = Search-ADAccount -AccountInactive -TimeSpan 120 -UsersOnly
$disabledAccounts = Search-ADAccount -AccountDisabled –UsersOnly
$expiredAccounts = Search-ADAccount -AccountExpired –UsersOnly
$unusedAccounts = $inactiveAccounts + $disabledAccounts + $expiredAccounts
$unusedAccounts | Export-Csv –Path C:\UnusedAccounts.csv
Natürlich lassen sich auch die Ergebnisse für andere Objekte, etwa nicht-verlinkte GPOs und leere Gruppen, auf diese Weise in einer CSV-Textdatei ausgeben.
Zum Löschen ungenutzter Benutzerkonten werden die Ergebnisse wieder unter Einsatz des Pipe-Symbols und des absichernden WhatIf-Parameters an Remove-AdUser weitergegeben. Erscheint die Ausgabe korrekt, so kann der WhatIf-Parameter entfernt und der Befehl erneut gestartet werden, um den Löschprozess auszuführen:
$unusedAccounts | Remove-AdUser -WhatIf
Folgen Sie SearchDataCenter.de auch auf Twitter, Google+ und Facebook!