PowerShell nativně již nějaký pátek umí vypočítat hash souboru, což je velmi užitečné pro hledání duplicit, ověření po síti přeneseného souboru, ověření shody dvou souborů apod., takže super funkce.
Někdy je také potřeba spočítat hash z textu a nemusí jít zrovna jen nutně o heslo…. Na to PowerShell již vestavěnou funkci nemá, pro hash využívaný v AD již funkci implementoval Michael Grafnetter ve svém modulu DS Internals, já tedy zde uvedu funkci, která počítá především SHA, ale zvládne také MD5.
Function Get-StringHash {
[cmdletbinding()]
[OutputType([String])]
param(
[parameter(ValueFromPipeline, Mandatory = $true, Position = 0)][String]$String,
[parameter(ValueFromPipelineByPropertyName, Mandatory = $true, Position = 1)]
[ValidateSet("MD5", "RIPEMD160", "SHA1", "SHA256", "SHA384", "SHA512")][String]$HashName
)
begin {
}
Process {
$StringBuilder = New-Object System.Text.StringBuilder
[System.Security.Cryptography.HashAlgorithm]::Create($HashName).ComputeHash([System.Text.Encoding]::UTF8.GetBytes($String))| foreach-object {
[Void]$StringBuilder.Append($_.ToString("x2"))
}
$output = $StringBuilder.ToString()
}
end {
return $output
}
}
Funkce přijímá 2 povinné parametry, text k výpočtu hash a požadovaný algoritmus.