I run a script to process a CSV file once an hour. At the beginning of the script, I need to exit out if the CSV file has not changed. Let's pretend that file timestamps aren't an option. (I'm asking this question for educational value)
I was considering slurping in the entire file and computing the hash on the contents, like so:
$fileData = get-content \path\to\file
$hashCode = $fileData.GetHashCode()
I would then save those contents from run to run, and if the hash is the same on subsequent runs, exit out of my script.
Is there a better way to do this, again, assuming file timestamps are not available?
You'll end up using the System.Security.Cryptography namespace to generate that hash. The PowerShell Community Extensions have already done the work for you. There is a Get-Hash cmdlet that returns a HashInfo object you could use for your comparison.
One thing to note, the
Get-HashCode()
is not meant to be used as a unique object identifier. It will always be different every time you run it, even in the same session.Check here and here for more information.