Using Powershell to calculate/compare MD5 hashes
Here’s some code to a) calculate a MD5 hash for a given file and b) to compare the hash with a MD5 provided in an external file. The scripts expects the MD5 file to have the same name, but MD5 extension. Credit goes to the friendly souls providing the original code, I just copied and pasted everything together.
The comparison is just visual, both MD5 hashes — the calculated and the provided one — are printed on the screen, it’s easily to extend it for an automated comparison.
# Reference: http://onlinemd5.com/ ### Step A: Get the name of the file # http://blogs.technet.com/b/heyscriptingguy/archive/2009/09/01/hey-scripting-guy-september-1.aspx Function Get-FileName($initialDirectory) { [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog $OpenFileDialog.initialDirectory = $initialDirectory $OpenFileDialog.filter = "All files (*.*)| *.*" $OpenFileDialog.ShowDialog() | Out-Null $OpenFileDialog.filename } #end function Get-FileName # *** Entry Point to Script *** $file = Get-FileName -initialDirectory "H:\MD5" ### Step B: Create a file handle from this string and calculate the MD5 sum $filehandle = Get-ChildItem $file # write-host "file: " $file # write-host "DirectoryName: " $filehandle.DirectoryName write-host "Name: " $filehandle.Name # write-host "pure Name: " $filehandle.BaseName # http://stackoverflow.com/questions/10521061/how-to-get-an-md5-checksum-in-powershell $md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider $hash = [System.BitConverter]::ToString($md5.ComputeHash([System.IO.File]::ReadAllBytes($filehandle))).ToLower().Replace("-","") write-host "Calculated Hashsum: " $hash ### Step C: Get the MD5 sum from the MD5 sum file matching the other filename $md5handle = Get-ChildItem $($filehandle.DirectoryName + "\" + $filehandle.BaseName + ".md5") $md5sum = [IO.File]::ReadAllText($md5handle) write-host "Provided MD5 " $md5sum |