Using PowerShell to check a folder copied

I’ve had a number of times over the years where I’ve needed to guarantee to someone that their data is unchanged as a result of an IT action

  • when we’ve migrated servers, replaced disks etc. The detailed, in depth, article by Jeff Hicks over at “Hashing it Out in PowerShell: Using Get-FileHash” showed me that a file-hash comparison was possible in Windows without a third party piece of software.

So, inspired by that, here’s a short bit of PowerShell script to check two folders are the same- the folder had been previously copied with a ROBOCOPY /MIR command. The script makes two lists of hashes, one for each folder, and compares the two.

1$SourceHash = Get-ChildItem -recurse X:\Folder\ | Get-FileHash
2$TargetHash = Get-ChildItem -recurse Y:\Folder\ | Get-FileHash
3Compare-Object $SourceHash.Hash $TargetHash.Hash

Or if you want to squish it to one line

1Compare-Object (Get-ChildItem -recurse X:\Folder\ | Get-FileHash).Hash (Get-ChildItem -recurse Y:\Folder\ | Get-FileHash).Hash

If the two folders are the same (i.e. the Robocopy worked as it should) then no output is displayed. To check it’s working, adding -includeequal to the end of the Compare-Object line will also output a line for identical files. For example

1Compare-Object (Get-ChildItem -recurse X:\Folder\ | Get-FileHash).Hash (Get-ChildItem -recurse Y:\Folder\ | Get-FileHash).Hash -includeequal

This should hopefully be a quick and simple solution for others, check out Jeff Hicks’ article or type get-help get-filehash in a PowerShell window for more in-depth information.