Backups archivieren Alte löschen
Backups muss man archivieren, jedoch mit Sicherheit nicht ewig behalten. Daher werden 7 Tage alle täglichen Backups aufbewahrt, es werden 20 WochenBackups behalten und 12 MonatsBackups.
$logfile = "D:\Monitoring\Status\Backup_archivieren_Status.txt"
function logit($zeile)
{
$zeitstempel = "{0:yyyy-MM-dd HH:mm:ss}" -f (Get-Date)
$zeitstempel + " " + $zeile | Out-File -Append -FilePath $logfile
}
$folders =@("Unterordner1","Unterordner2","Unterordner3","Unterordner4")
$zielpfad = "\\server\Daten\Backup\"
$lokaleBackups = "D:\Backup\"
logit "######### STARTE BACKUP KOPIEREN #########"
foreach($folder in $folders)
{
if(!(Test-Path "$zielpfad\$folder" ))
{
logit "neuer Backupzielordner `"$zielpfad\$folder`" wird erstellt"
New-Item -ItemType Directory -Path "$zielpfad\$folder"
}
$quelle = ls $lokaleBackups\$folder
$ziel = ls $zielpfad\$folder
foreach($quellverzeichnis in $quelle)
{
if(!(Test-Path "$zielpfad\$folder\$($quellverzeichnis.name)"))
{
logit "######### STARTE KOPIE FÜR $folder #########"
Copy-Item $quellverzeichnis.FullName "$zielpfad\$folder" -Recurse
logit "kopiere $quellverzeichnis nach $zielpfad\$folder"
logit "######### ENDE KOPIE FÜR $folder #########"
}
else
{
logit "Verzeichnis $zielpfad\$folder schon vorhanden"
}
}
}
logit "######### STARTE ALTE BACKUPS LÖSCHEN AUF FILER #########"
##Backups aufräumen auf Filer !
foreach($folder in $folders)
{
logit "######### FÜR $folder #########"
$month = 0
$wochentagFuerWochenBackup = 0
$tageDieNichtGeloeschtwerdenSollen = 7
$anzahlzuBehaltenderWochenBackups = 20
$anzahlzuBehaltenderMonatsBackups = 12
$FileList = ls "$zielpfad\$folder"
logit $folder
foreach($File in ($FileList | Sort-Object LastWriteTime -Descending ))
{
if(! ($File.LastWriteTime -is [datetime])){continue}
if($File.LastWriteTime -ge (Get-Date).AddDays(0-$tageDieNichtGeloeschtwerdenSollen))
{
logit "$($File.LastWriteTime) $($File.fullname) wird nicht gelöscht da noch nicht $tageDieNichtGeloeschtwerdenSollen alt ist"
continue
}
if(($File.LastWriteTime.DayOfWeek -eq $wochentagFuerWochenBackup) -and ($anzahlzuBehaltenderWochenBackups -gt 0))
{
logit "$($File.LastWriteTime) $($File.fullname) wird nicht gelöscht da es ein WochenBackup ist $($File.LastWriteTime.DayOfWeek)"
$anzahlzuBehaltenderWochenBackups-- # = $anzahlzuBehaltenderWochenBackups -1
continue
}
if(($anzahlzuBehaltenderMonatsBackups -gt 0) -and ($anzahlzuBehaltenderWochenBackups -eq 0) )
{
if($month -eq 0 -or ($month -ne $File.LastWriteTime.Month ) )
{
$month = $File.LastWriteTime.Month
logit "$($File.LastWriteTime) $($File.fullname) wird nicht gelöscht da es ein Monatsbackup ist ; anzahl $anzahlzuBehaltenderMonatsBackups"
$anzahlzuBehaltenderMonatsBackups-- # = $anzahlzuBehaltenderWochenBackups -1
continue
}
}
logit "lösche $($File.FullName)"
Remove-Item -LiteralPath $File.FullName -Confirm:$false -Recurse
}
}
logit "######### STARTE ALTE BACKUPS LÖSCHEN AUF LOKALEM LAUFWERK #########"
##Backups aufräumen auf lokaler HDD !
foreach($folder in $folders)
{
logit "######### FÜR $folder #########"
$month = 0
$wochentagFuerWochenBackup = 0
$tageDieNichtGeloeschtwerdenSollen = 7
$anzahlzuBehaltenderWochenBackups = 1
$anzahlzuBehaltenderMonatsBackups = 1
$FileList = ls "$lokaleBackups\$folder"
logit $folder
foreach($File in ($FileList | Sort-Object LastWriteTime -Descending ))
{
if(! ($File.LastWriteTime -is [datetime])){continue}
if($File.LastWriteTime -ge (Get-Date).AddDays(0-$tageDieNichtGeloeschtwerdenSollen))
{
logit "$($File.LastWriteTime) $($File.fullname) wird nicht gelöscht da noch nicht $tageDieNichtGeloeschtwerdenSollen Tage alt ist"
continue
}
if(($File.LastWriteTime.DayOfWeek -eq $wochentagFuerWochenBackup) -and ($anzahlzuBehaltenderWochenBackups -gt 0))
{
logit "$($File.LastWriteTime) $($File.fullname) wird nicht gelöscht da es ein WochenBackup ist $($File.LastWriteTime.DayOfWeek)"
$anzahlzuBehaltenderWochenBackups-- # = $anzahlzuBehaltenderWochenBackups -1
continue
}
if(($anzahlzuBehaltenderMonatsBackups -gt 0) -and ($anzahlzuBehaltenderWochenBackups -eq 0) )
{
if($month -eq 0 -or ($month -ne $File.LastWriteTime.Month ) )
{
$month = $File.LastWriteTime.Month
logit "$($File.LastWriteTime) $($File.fullname) wird nicht gelöscht da es ein Monatsbackup ist ; anzahl $anzahlzuBehaltenderMonatsBackups"
$anzahlzuBehaltenderMonatsBackups-- # = $anzahlzuBehaltenderWochenBackups -1
continue
}
}
logit "lösche $($File.FullName)"
Remove-Item -LiteralPath $File.FullName -Confirm:$false -Recurse
}
}
logit "######### ENDE BACKUP KOPIEREN #########"