Gruppenrichtlinienobjekte sichern und wiederherstellen mit PowerShell

    Gruppenrichtlinienobjekte (GPOs)GPOs spielen eine zentrale Rolle bei der Verwaltung von Clients und Server, so dass ihr Verlust erhebliche Auswir­kungen hätte. Neben der Backup-Funktion in der Gruppen­richt­linien­ver­waltung stehen Cmdlets in PowerShell zur Ver­fügung, die diese Aufgabe flexi­bler und schneller erledigen können als die GUI.

    Aufgrund der verteilten Architektur des Active Directory ist die Gefahr relativ gering, dass sämtliche GPOs durch einen Hardware-Defekt verloren gehen. Im Übrigen wird jeder verantwortungsbewusste Admin regelmäßig Backups seiner DCs erstellen, so dass sich diese auf einem relativ neuen Stand wiederherstellen lassen.

    Kein Schutz durch AD-Papierkorb

    Größeres Risiko droht hingegen durch Fehler eines Systemverwalters, denn das versehentliche Löschen von GPOs wird auf alle Domain Controller repliziert. Im Gegensatz zu anderen AD-Objekten hilft in diesem Fall der AD-Papierkorb nicht, weil GPOs zu einem wesentlichen Teil im Dateisystem (unterhalb von sysvol) gespeichert werden.

    Aus diesem Grund bietet die Gruppenricht­linienverwaltung schon lange einen eigenen Mechanismus an, mit dem man GPOs sichern und wiederherstellen kann. Wenn man nicht alle davon speichern, sondern aus einer größeren Zahl nur bestimmte auswählen möchte, dann ist die Verwendung der GUI dafür umständlich.

    Sowohl für PowerShell als auch auch für die Gruppen­richt­linien­verwaltung gilt jedoch die Einschränkung, dass sie nicht sämtliche Aspekte von GPOs sichern können. Das Backup enthält die Einstellungen, Sicherheitsfilterung und die Delegierungen. Auf der Strecke bleiben indes Verknüpfungen (inklusive Reihenfolge), WMI-Filter und Atrribute wie Erzwungen oder Vererbung deaktivieren.

    GPOs filtern mit Get-GPO

    PowerShell bietet den Vorteil, dass man die GPOs nach verschiedenen Kriterien filtern kann. Möchte man etwa nur alle jene anzeigen, bei denen nicht sämtliche Einstellungen deaktiviert wurden, dann erreicht man das mit einem solchen Aufruf:

    Get-GPO -All | where GpoStatus -ne AllSettingsDisabled

    Analog dazu könnte man alle GPOs auswählen, die nach einem bestimmten Datum erstellt wurden, etwa dem 1. Januar 2015:

    Get-GPO -All | where CreationTime -gt 01.01.2015

    Das Cmdlet Get-GPO kennt anstelle des Parameters -All auch -Name, um nur bestimmte Gruppenricht­linienobjekte zu erhalten, aber dieser akzeptiert keine Wildcards. Stattdessen könnte man wie in den obigen Beispielen vorgehen und die Namen nach dem Muster

    Get-GPO -All | where DisplayName -like *Ping*

    filtern.

    Alle bisherigen Aufrufe geben GPOs aus jener Domäne aus, deren Mitglied der aktuell angemeldete Benutzer ist. Möchte man über den Parameter -Domain die GPOs einer anderen Domäne abfragen, dann muss eine Vertrauens­beziehung zu dieser bestehen. Bei Bedarf kann man mit dem Parameter -Server einen bestimmten DC spezifizieren.

    Backup der GPOs erstellen

    Im nächsten Schritt übergibt man die GPOs, die man sichern möchte, an das Cmdlet Backup-GPO. Möchte man alle Objekte speichern, dann kann man es alleine aufrufen, indem man den Schalter -All verwendet. Will man ihm aber eine gefilterte Liste übergeben, dann leitet man den Output von Get-GPO mittels Pipe weiter:

    Get-GPO -All | where CreationTime -gt 01.01.2015 | Backup-GPO -Path C:\backup\GPO

    GPOs wiederherstellen

    Für die Wiederherstellung gesicherter Gruppenricht­linienobjekte ist das Cmdlet Restore-GPO zuständig. Im einfachsten Fall teilt man ihm über den Schalter -All mit, dass es aus dem neuesten Backup alle GPOs in der Domäne restauriert, an welcher der aktuelle Benutzer angemeldet ist. Als zwingende weitere Angabe benötigt das Cmdlet jenes Verzeichnis, in dem das Backup gespeichert wurde. Dafür verwendet man den Parameter -Path:

    Restore-GPO -All -Path C:\backup\GPO

    Alternativ kann man gezielt einzelne GPOs zurückspeichern, dafür benötigt man aber entweder den Namen (ohne Wildcards) oder die GUID des Objekts. Schlimmstenfalls muss man sich dafür durch das Backup-Verzeichnis wühlen oder dort die Datei manifest.xml auslesen.

    Die mit PowerShell gesicherten GPOs lassen sich mit der Gruppenrichtlinienverwaltung wiederherstellen.

    Bequemer dürfte es für ein selektives Wiederherstellen sein, die GUI der Gruppenricht­linienverwaltung zu bemühen. Dort führt man aus dem Kontextmenü von Gruppenricht­linienobjekte den Befehl Sicherungen verwalten aus und gibt anschließend das Verzeichnis an, in dem man die GPOs mit PowerShell gesichert hat. Das Tool zeigt daraufhin eine detaillierte Übersicht der vorhandenen Backups an.

    Keine Kommentare