Tags: Backup, PowerShell, Gruppenrichtlinien
GPOs spielen eine zentrale Rolle bei der Verwaltung von Clients und Server, so dass ihr Verlust erhebliche Auswirkungen hätte. Neben der Backup-Funktion in der Gruppenrichtlinienverwaltung stehen Cmdlets in PowerShell zur Verfügung, die diese Aufgabe flexibler 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 Gruppenrichtlinienverwaltung 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 Gruppenrichtlinienverwaltung 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 Gruppenrichtlinienobjekte 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 Vertrauensbeziehung 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 Gruppenrichtlinienobjekte 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.
Bequemer dürfte es für ein selektives Wiederherstellen sein, die GUI der Gruppenrichtlinienverwaltung zu bemühen. Dort führt man aus dem Kontextmenü von Gruppenrichtlinienobjekte 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.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- PowerShell für Logon-Scripts verwenden
- Welche lokalen Gruppenrichtlinien sind auf dem Rechner aktiviert?
- Defender Antivirus konfigurieren: Ausschlüsse, Echtzeitschutz, Scan-Verhalten und Reaktion auf Bedrohungen
- Microsoft Defender: Updates für Viren-Signaturen über Gruppenrichtlinien und PowerShell steuern
- Remotedesktop in Windows 11 und Server 2022 aktivieren (GUI, WAC, WMI, GPO)
Weitere Links