52 lines
1.4 KiB
Plaintext
52 lines
1.4 KiB
Plaintext
function Get-Hash
|
|
{
|
|
[CmdletBinding(DefaultParameterSetName="String")]
|
|
[OutputType([string])]
|
|
Param
|
|
(
|
|
[Parameter(Mandatory=$true,
|
|
ParameterSetName="String",
|
|
Position=0)]
|
|
[string]
|
|
$String,
|
|
|
|
[Parameter(Mandatory=$true,
|
|
ParameterSetName="FileName",
|
|
Position=0)]
|
|
[string]
|
|
$FileName,
|
|
|
|
[Parameter(Mandatory=$false,
|
|
Position=1)]
|
|
[ValidateSet("MD5", "RIPEMD160", "SHA1", "SHA256", "SHA384", "SHA512")]
|
|
[string]
|
|
$HashType = "MD5"
|
|
)
|
|
|
|
$hashAlgorithm = [System.Security.Cryptography.HashAlgorithm]
|
|
$stringBuilder = New-Object -TypeName System.Text.StringBuilder
|
|
|
|
switch ($PSCmdlet.ParameterSetName)
|
|
{
|
|
"String"
|
|
{
|
|
$hashAlgorithm::Create($HashType).ComputeHash([System.Text.Encoding]::UTF8.GetBytes($String)) | ForEach-Object {
|
|
$stringBuilder.Append($_.ToString("x2")) | Out-Null
|
|
}
|
|
}
|
|
"FileName"
|
|
{
|
|
$fileStream = New-Object -TypeName System.IO.FileStream -ArgumentList $FileName, ([System.IO.FileMode]::Open)
|
|
|
|
$hashAlgorithm::Create($HashType).ComputeHash($fileStream) | ForEach-Object {
|
|
$stringBuilder.Append($_.ToString("x2")) | Out-Null
|
|
}
|
|
|
|
$fileStream.Close()
|
|
$fileStream.Dispose()
|
|
}
|
|
}
|
|
|
|
$stringBuilder.ToString()
|
|
}
|