Powershell. Получение MD5 от файла.

<#
.SYNOPSIS
Gets the hash value of a file or string
.DESCRIPTION
Gets the hash value of a file or string
Be aware, to avoid confusions, that if you use the pipeline, the behaviour is the same as using -Text, not -File
.PARAMETER File
File to get the hash from.
.PARAMETER Text
Text string to get the hash from
.PARAMETER Algorithm
Type of hash algorithm to use. Default is SHA1
.EXAMPLE
C:\PS> Get-Hash "hello_world.txt"
Gets the SHA1 from myFile.txt file. When there's no explicit parameter, it uses -File
.EXAMPLE
Get-Hash -File "C:\temp\hello_world.txt"
Gets the SHA1 from myFile.txt file
.EXAMPLE
C:\PS> Get-Hash -Algorithm "MD5" -Text "Hello Wold!"
Gets the MD5 from a string
.EXAMPLE
C:\PS> "Hello Wold!" | Get-Hash
We can pass a string throught the pipeline
.EXAMPLE
Get-Content "c:\temp\hello_world.txt" | Get-Hash
It gets the string from Get-Content
.EXAMPLE
Get-ChildItem "C:\temp\*.txt" | %{ Write-Output "File: $($_)   has this hash: $(Get-Hash $_)" }
This is a more complex example gets the hash of all "*.tmp" files
.NOTES
DBA daily stuff (http://dbadailystuff.com) by Josep Martínez Vilà
Licensed under a Creative Commons Attribution 3.0 Unported License
.LINK
#>
function Get-Hash
{
     Param
     (
          [parameter(Mandatory=$true, ValueFromPipeline=$true, ParameterSetName="set1")]
          [String]
          $text,
          [parameter(Position=0, Mandatory=$true, ValueFromPipeline=$false, ParameterSetName="set2")]
          [String]
          $file = "",
          [parameter(Mandatory=$false, ValueFromPipeline=$false)]
          [ValidateSet("MD5", "SHA", "SHA1", "SHA-256", "SHA-384", "SHA-512")]
          [String]
          $algorithm = "SHA1"
     )
     Begin
     {
          $hashAlgorithm = [System.Security.Cryptography.HashAlgorithm]::Create($algorithm)
     }
     Process
     {
          $md5StringBuilder = New-Object System.Text.StringBuilder 50
          $ue = New-Object System.Text.UTF8Encoding
          if ($file){
               try {
                    if (!(Test-Path -literalpath $file)){
                         throw "Test-Path returned false."
                    }
               }
               catch {
                    throw "Get-Hash - File not found or without permisions: [$file]. $_"
               }
               try {
                    [System.IO.FileStream]$fileStream = [System.IO.File]::Open($file, [System.IO.FileMode]::Open);
                    $hashAlgorithm.ComputeHash($fileStream) | % { [void] $md5StringBuilder.Append($_.ToString("x2")) }
               }
               catch {
                    throw "Get-Hash - Error reading or hashing the file: [$file]"
               }
               finally {
                    $fileStream.Close()
                    $fileStream.Dispose()
               }
          }
          else {
               $hashAlgorithm.ComputeHash($ue.GetBytes($text)) | % { [void] $md5StringBuilder.Append($_.ToString("x2")) }
          }
          return $md5StringBuilder.ToString()
     }
}

 

По теме:

http://xaegr.wordpress.com и http://xaegr.wordpress.com и http://dbadailystuff.com

 

Об авторе Alex

Работаю Администратором. В основном Windows. Специализируюсь на Hyper-V, поддержке продуктивных сред и во всём помогает POSH. Малость Sharepoint. Чуть чуть работаю с железом
Запись опубликована в рубрике Powershell с метками , . Добавьте в закладки постоянную ссылку.

Добавить комментарий