Validating File Hashes in PowerShell
PowerShell (from version 4 onwards I think) has a Get-FileHash cmdlet that lets you generate a quick-and-dirty md5 hash of a file. This is particularly useful if you are running a process which may or may not update a lot of files and you can't be sure what the effects have been.
Here I iterate through a folder, recording the original version of the hash against the file name. We then run the potentially destructive tool and re-examine the files and report on changes. For simplicity I am just writing text out to the screen and using red for failures, green for each match and yellow for new files created in the mystery process.
$OriginalHashes = @{ }
# Record pre-whatever state.
Get-ChildItem -Path $here -Filter *.* | ForEach-Object {
[string]$File = $_.Name
[string]$Hash = (Get-FileHash $_.FullName).Hash
$OriginalHashes.Add($File, $Hash)
}
# ... Do something potentially destructive
# Regenerate hashes and compare to existing.
Get-ChildItem -Path $here -Filter *.* | ForEach-Object {
[string]$File = $_.Name
[string]$NewHash = (Get-FileHash $_.FullName).Hash
If ($OriginalHashes.ContainsKey($File)) {
$OldHash = $OriginalHashes[$File]
If ($OldHash -ne $NewHash) {
Write-Host "Hash values differ for $File - old: $OldHash new: $NewHash" -ForegroundColor Red
} Else {
Write-Host "Hashes for $File match" -ForegroundColor Green
}
} Else {
Write-Host "New file: $File" -ForegroundColor Yellow
}
}