PowerShell script to check my backup by comparing file hashes
This sample PowerShell script compares the files in two different paths by calculating and comparing hashes for each file. I use it to compare my backup to the source data, after the backup is complete.
$SourcePath = "D:\" $BackupPath = "F:\Backup 2018-05-27\" Write-Progress -Activity "Getting File List" -PercentComplete 0 $FileList = DIR $SourcePath -Recurse -File $Total = $FileList.Count $Count = 0 $BadCount = 0 $FileList | % { $File = $_.FullName $Backup = $File.Replace($SourcePath, $BackupPath) Try { $Match = (Get-FileHash $File).Hash -eq (Get-FileHash $Backup).Hash } Catch { $Match = $false } If (-not $Match) { $BadCount++ "Hash mismatch: $File, $Backup" } $Count++ If ($Count % 1000 -eq 0) { Write-Progress -Activity "File $Count of $Total" -PercentComplete ($Count/$Total*100) } } Write-Progress -Activity "Checking Files" -Completed "There were $BadCount bad files out of the $Count files checked"
Comments
- Anonymous
November 26, 2018
Thanks, I was able to take this and create a script to compare two directories and their children then update or create a file at a backup destination. I was able to make some efficiency improvements and It's able to loop through ~22,000 files in half the time. I'd like to share but I'm new to this and am not sure where I should do that.