I’m creating a file and to protect the integrity of it I would want to attach the MD5 checksum in the header.
Using the below script from Josep - Get-Hash, a powershell hash function I can get the MD5 checksum…But I’m just thinking that as soon as i generate it and then apply it to the header, the MD5 checksum has changed again…Is there a method to adding the checksum in the header without changing it by adding it to the header?
It would in theory look like…
Performed by: $username
Date: $date
MD5: $md5hash
everything else in the report below
Get-Hash "hello_world.txt" Gets the SHA1 from myFile.txt file. When there's no explicit parameter, it uses -File .EXAMPLE Get-Hash -File "C:\temp\hello_world.txt" Gets the SHA1 from myFile.txt file .EXAMPLE C:\PS> Get-Hash -Algorithm "MD5" -Text "Hello Wold!" Gets the MD5 from a string .EXAMPLE C:\PS> "Hello Wold!" | Get-Hash We can pass a string throught the pipeline .EXAMPLE Get-Content "c:\temp\hello_world.txt" | Get-Hash It gets the string from Get-Content .EXAMPLE Get-ChildItem "C:\temp\*.txt" | %{ Write-Output "File: $($_) has this hash: $(Get-Hash $_)" } This is a more complex example gets the hash of all "*.tmp" files .NOTES DBA daily stuff (http://dbadailystuff.com) by Josep Martínez Vilà Licensed under a Creative Commons Attribution 3.0 Unported License .LINK Original post: http://dbadailystuff.com/2013/03/11/get-hash-a-powershell-hash-function/ #> function Get-Hash { Param ( [parameter(Mandatory=$true, ValueFromPipeline=$true, ParameterSetName="set1")] [String] $text, [parameter(Position=0, Mandatory=$true, ValueFromPipeline=$false, ParameterSetName="set2")] [String] $file = "", [parameter(Mandatory=$false, ValueFromPipeline=$false)] [ValidateSet("MD5", "SHA", "SHA1", "SHA-256", "SHA-384", "SHA-512")] [String] $algorithm = "SHA1" ) Begin { $hashAlgorithm = [System.Security.Cryptography.HashAlgorithm]::Create($algorithm) } Process { $md5StringBuilder = New-Object System.Text.StringBuilder 50 $ue = New-Object System.Text.UTF8Encoding if ($file){ try { if (!(Test-Path -literalpath $file)){ throw "Test-Path returned false." } } catch { throw "Get-Hash - File not found or without permisions: [$file]. $_" } try { [System.IO.FileStream]$fileStream = [System.IO.File]::Open($file, [System.IO.FileMode]::Open); $hashAlgorithm.ComputeHash($fileStream) | % { [void] $md5StringBuilder.Append($_.ToString("x2")) } } catch { throw "Get-Hash - Error reading or hashing the file: [$file]" } finally { $fileStream.Close() $fileStream.Dispose() } } else { $hashAlgorithm.ComputeHash($ue.GetBytes($text)) | % { [void] $md5StringBuilder.Append($_.ToString("x2")) } } return $md5StringBuilder.ToString() } }