在PowerShell中没有内置Get-FileHash cmdlet的情况下获取校验和

时间:2017-06-14 08:15:40

标签: powershell powershell-v2.0 md5 powershell-v3.0 checksum

由于Powershell的版本低于4,我无法使用内置的cmdlet Get-FileHash生成校验和值。

是否有另一种获取或验证文件完整性的方法?

1 个答案:

答案 0 :(得分:3)

确定假设您有一个文件项(例如来自Get-ChildItem)

$stream = new-object system.IO.FileStream($item.fullname, "Open", "Read", "ReadWrite")

使用FileStream打开文件以获取流对象。

然后,您可以使用其中一个Crypto类来计算其哈希值:

if ($stream)
{
      $sha = new-object -type System.Security.Cryptography.SHA256Managed
      $bytes = $sha.ComputeHash($stream)
      $stream.Dispose()
      $stream.Close()
      $sha.Dispose()
      $checksum = [System.BitConverter]::ToString($bytes).Replace("-", [String]::Empty).ToLower();
}

最后校验和位于$checksum,它是一个很好的字符串,可用于比较:

5989b3cdcff6a594b2b2aef7f6288f7727019c037515c2b10627721e707cf613

您可以在System.Security.Cryptography下使用各种类来计算哈希值,您可以在此处查看可用的内容:https://msdn.microsoft.com/en-us/library/system.security.cryptography(v=vs.110).aspx