Using Get-FileHash and Compare to create a list of changed files

by Aug 26, 2014

I want to collect the hash of a set of files and store them in a baseline. I later want to collect the hash of the same files and store them in a new file, i.e. Difference.xml. I then want to compare the hash of these two files, and if there is a change, list each line item file that has changed along with the hash, the file path, and the last modified date. Just to be clear, I am only comparing the hash of the files containing multiple hashes, and only doing a line by line comparison if there is a difference. I would like to output this to Xml. 

Here is what I have come up with:

$DateTime = Get-Date -format
$files=@('d:scripts*','d:FileCheckerv2.ps1','d:Change Request.csv')
if(test-path $hashstore){
else {
Get-FileHash $files -Algorithm MD5 | Export-Clixml $Hashstore
$current=Get-FileHash $files -Algorithm MD5 | Export-Clixml $HashCompare
if($HashStore = $HashCompare) {
Write-Host 'Files are the same' -BackgroundColor green
Write-Host 'Differences Found!' -ForegroundColor red
# compare
$results = Compare-Object $baseline $HashCompare
$results | Export-CliXml $output
Get-FileHash $files -Algorithm MD5 | Export-Clixml $Hashstore

This is reaaally close, but for some reason, if I go and change the contents of one of the files, the difference object will reflect the new hash, but will still give me the true of the if statement. Also, when I run

 It seems like it tries to compare the contents of the file that is $baseline with the file that is $hashcompare, a la 

Compare-Object $baseline $HashCompare
PS D:> Compare-Object $baseline $HashCompare | Write-Host
@{InputObject=d:Difference.xml; SideIndicator==>}
@{InputObject=; SideIndicator=<=}
@{InputObject=; SideIndicator=<=}
@{InputObject=; SideIndicator=<=}
@{InputObject=; SideIndicator=<=}

What do I need to do to get the script to insert the last modified date, and make the comparisons correctly?

Thanks in advance!