Für die inkrementellen Zwischensicherungen bis zur nächsten Voll-Sicherung nutze ich nun unten angehangenes Skript. Es sichert mit Hilfe des, bei der letzten Voll- oder Zwischensicherung zurückgesetzten, Archiv-Attributs nur die seit dem geänderten und neu erstellten Dateien. Zusätzlich schreibt es die Pfade aller aktuell in den Quell-Ordnern vorhandenen Dateien in eine Textdatei. Diese könnten bei einer Wiederherstellung genutzt werden, um gelöschte Dateien aus dem letzten Voll-Backup zu löschen und somit den exakten Zustand wieder herzustellen. Am Ende wird die inkrementelle Sicherung in meinen OneDrive-Ordner gezippt und automatisch hochgeladen. Beim nächsten vollen Backup sind die bis dahin erstellten Zip-Archive allerdings nicht mehr wirklich brauchbar, da man bei der Vorgehensweise aus meinem anderen Beitrag das zugrunde liegende Voll-Backup immer wieder überschreibt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# define source folders $Sources = 'E:\Test1','E:\Test2' # define destination folder $DestinationRoot = 'D:\Backup' # define log-file $Date = Get-Date -Format 'yyyy-MM-dd' $Log = "D:\Backup\$Date\Incremental.log" $FileList = "D:\Backup\$Date\Files.txt" # define files / filetypes which should be excluded $Excludes = 'thumbs.db','*.xyz' # define compression $7zip = "D:\7za.exe" $ZipPath = "C:\Users\Username\OneDrive\Backup\$Date.zip" # loop through all source folders foreach ($Source in $Sources){ # determine destination path and run robocopy $Destination = $DestinationRoot + '\' + $Date + '\' + $Source.Remove(0,3) robocopy $Source $Destination /MIR /M /XF $Excludes /TEE /NP /ZB /LOG+:$Log # robocopy parameters: # MIR: mirroring, not only copying files, also deleting files # M: copy only files with archive bit and also reset the archive bit # XF: exclude file # TEE: log-output in file and console # NP: don't show progress # create list of all files and directories to know which files are deleted $Items = Get-ChildItem -Path $Source -Recurse # enumerate the items array foreach ($Item in $Items){ # if the item is a directory, then process it. Add-Content $FileList $Item.FullName } } # ZIP everything & $7zip a -tzip $ZipPath "$DestinationRoot\$Date" |
IncrementalBackup.ps1
Achtung: In dieser Version ist das Skript nicht für Netzlaufwerke als Quellordner geeignet.