$MyString = $obj | Out-String
$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$utf8 = New-Object -TypeName System.Text.UTF8Encoding
$hash = [System.BitConverter]::ToString($md5.ComputeHash($utf8.GetBytes($MyString)))
$hash -replace "-"
}
проблема в том что при пересоздании объекта с одинаковыми значениями хеш меняется
function Get-ObjectHash { param( [Parameter( Mandatory = $true, Position = 0, ValueFromPipeline = $true)] [object]$InputObject, [Parameter( Mandatory = $false, Position = 1 )] [string]$Algorithm = "MD5" ) begin { $HashAlgorithm = [System.Security.Cryptography.HashAlgorithm]::Create($Algorithm) $Encoding = New-Object System.Text.UTF8Encoding($true, $true) $StringBuilder = New-Object System.Text.StringBuilder } process { $Text = $InputObject | Out-String [byte[]]$Bytes = $Encoding.GetBytes($Text) $Bytes = $HashAlgorithm.ComputeHash($Bytes) $Bytes | % {$StringBuilder.AppendFormat("{0:x2}", $_) | Out-Null} $StringBuilder.ToString() $StringBuilder.Clear() | Out-Null } end { if ($HashAlgorithm -ne $null) { $HashAlgorithm.Dispose() $HashAlgorithm = $null } } } Вроде бы проверил, всё ок
Если у объекта какие-то свойства меняются, то по понятным причинам хэш будет меняться.
Обсуждают сегодня