GPO-Backup

GPO-Backup

Routine zum Erstellen eines GPO-Backups. Mit Archivierung und Kompression.

# 23.01.2021 - Adrian Gayl
# Routine schreibt für jede GPO der Domain ein Unterverz. in den Backup-pfad
# Diese werden dann in ein ZIP-File mit aktuellen Zeitstempel archiviert
# Die Kopie des Ordners brauche ich nur, da das Archiv-Verzeichnis ebenfalls in dem Ordner der Backups liegen soll
# 



$backupfolder = "C:\GPO-Backup"
if(!(Test-Path -Path $backupfolder)) {New-Item -ItemType Directory -Path $backupfolder}
ls $backupfolder -Directory -Exclude "Archive" | %{Remove-Item $_ -Force -Confirm:$false -Recurse} #Sonst werden die Backups immer daszugeschrieben
$GUIDs = Get-ADObject -SearchBase "CN=Policies,$((get-addomain).SystemsContainer)" -Filter *  -SearchScope OneLevel| select name
$GUIDs | %{ Backup-GPO -Guid $_.name -Path $backupfolder}

Add-Type -AssemblyName system.io.compression.filesystem
 
$path = $backupfolder
$archivePath = "$path\Archive"
$DateFolder = $archivePath.ToString() + "\" + (get-date -Format yyyy-MM-dd-HH_mm_ss).ToString() 
if(!(Test-Path -Path $archivePath))
    {
    New-Item -ItemType Directory $archivePath
    }

if(!(Test-Path -Path $DateFolder))
    {
    New-Item -ItemType Directory $DateFolder
    }
 
ls $backupfolder -Directory -Exclude "Archive" | %{copy-Item $_ -Force -Destination $DateFolder -Recurse}

[io.compression.zipfile]::CreateFromDirectory($DateFolder,"$DateFolder.zip",0,$false)
# 1=Fastest,2=NoCompression,0=Optimal 
# $false ohne den Folder $true $datefolder ist im Ziparchive mit enthalten
Remove-Item -Path $DateFolder -Recurse -Force