По просьбам трудящихся публикую скриптик, который подсчитывает хеш для файлов. Скрипт очень простой, он всего лишь выводит имя файла (полное) и значение хеша, который можно использовать как вам нужно.
function Get-FileHash { [CmdletBinding()] param( [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelinebyPropertyName = $true)] [string]$FullName, [ValidateSet("MD5","SHA1","SHA256","SHA384","SHA512")] [string]$Hash = "SHA1" ) begin { function Test-FileLock ($file) { $locked = $false trap { Set-Variable -name locked -value $true -scope 1 continue } $inputStream = New-Object system.IO.StreamReader $file if ($inputStream) {$inputStream.Close()} $locked } $Hasher = switch ($Hash) { "MD5" {[System.Security.Cryptography.MD5]::Create()} "SHA1" {[System.Security.Cryptography.SHA1]::Create()} "SHA256" {[System.Security.Cryptography.SHA256]::Create()} "SHA384" {[System.Security.Cryptography.SHA384]::Create()} "SHA512" {[System.Security.Cryptography.SHA512]::Create()} } } Process { $file = gi (Resolve-Path $FullName) -Force if ($file -is [IO.FileInfo]) { if (Test-FileLock $file) {return} $inputStream = New-Object System.IO.StreamReader ($file) $hashBytes = $hasher.ComputeHash($inputStream.BaseStream) $inputStream.Close() $builder = New-Object System.Text.StringBuilder $hashBytes | %{[void]$builder.Append($_.ToString("X2"))} New-Object psobject -Property @{ FullName = $file.ToString() Hash = $builder.ToString() } } } }
Использование простое: dir c:\folder | Get-FileHash
или с указанием другого алгоритма (по умолчанию SHA1): dir c:\folder -recurse | Get-FileHash -Hash sha256
Но, всё же, для отслеживания изменённых файлов советую использовать мой PSFCIV, который специально заточен под это дело и позволяет не только считать хеши, но и проверять их.
двачую psfciv
Comments: