Contents of this directory is archived and no longer updated.

По просьбам трудящихся публикую скриптик, который подсчитывает хеш для файлов. Скрипт очень простой, он всего лишь выводит имя файла (полное) и значение хеша, который можно использовать как вам нужно.

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, который специально заточен под это дело и позволяет не только считать хеши, но и проверять их.


Share this article:

Comments:

artem

двачую psfciv

Comments are closed.