Quantcast
Channel: PowerShell.com – PowerShell Scripts, Tips, Forums, and Resources
Viewing all articles
Browse latest Browse all 6937

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

$
0
0

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-formatM.d.yyyy.hh.mm.ss
$Hashstore='d:\Baseline.xml'
$HashCompare='d:\Difference.xml'
$output="d:\Results_$DateTime.xml"
$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
}else{
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!

 


Viewing all articles
Browse latest Browse all 6937

Trending Articles