Get-FileHash

使用指定的哈希算法计算文件的哈希值。

语法

Get-FileHash
   [-Path] <String[]>
   [-Algorithm <String>]
   [<CommonParameters>]
Get-FileHash
   -LiteralPath <String[]>
   [-Algorithm <String>]
   [<CommonParameters>]
Get-FileHash
   -InputStream <Stream>
   [-Algorithm <String>]
   [<CommonParameters>]

说明

Get-FileHash cmdlet 使用指定的哈希算法计算文件的哈希值。 哈希值是对应于文件内容的唯一值。 哈希不按文件文件名、扩展名或其他指定来标识文件的内容,而是为文件的内容分配唯一值。 可以更改文件名和扩展名,而无需更改文件的内容,也无需更改哈希值。 同样,可以在不更改名称或扩展名的情况下更改文件的内容。 但是,即使在文件内容中更改单个字符也会更改文件的哈希值。

哈希值的目的是提供一种加密安全的方法来验证文件的内容是否已更改。 虽然某些哈希算法(包括 MD5 和 SHA1)不再被视为安全免受攻击,但安全哈希算法的目标是使无法意外更改文件的内容,或者恶意或未经授权的尝试,并维护相同的哈希值。 还可以使用哈希值来确定两个不同的文件是否完全相同的内容。 如果两个文件的哈希值相同,则文件的内容也相同。

默认情况下,Get-FileHash cmdlet 使用 SHA256 算法,尽管可以使用目标操作系统支持的任何哈希算法。

示例

示例 1:计算 PowerShell.exe 文件的哈希值

PS C:\> Get-FileHash $pshome\powershell.exe | Format-List
Algorithm : SHA256
Hash      : 6A785ADC0263238DAB3EB37F4C185C8FBA7FEB5D425D034CA9864F1BE1C1B473
Path      : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

此命令使用 Get-FileHash cmdlet 计算 Powershell.exe 文件的哈希值。 使用的哈希算法是默认的 SHA256。 输出通过管道传递给 Format-List cmdlet,以将输出格式化为列表。

示例 2:计算 ISO 文件的哈希值

PS C:\> Get-FileHash C:\Users\Andris\Downloads\Contoso8_1_ENT.iso -Algorithm SHA384 | Format-List

Algorithm : SHA384
Hash      : 20AB1C2EE19FC96A7C66E33917D191A24E3CE9DAC99DB7C786ACCE31E559144FEAFC695C58E508E2EBBC9D3C96F21FA3
Path      : C:\Users\Andris\Downloads\Contoso8_1_ENT.iso

此命令使用 Get-FileHash cmdlet 和 SHA384 算法计算管理员从 Internet 下载的 ISO 文件的哈希值。 输出通过管道传递给 Format-List cmdlet,以将输出格式化为列表。

示例 3:计算流的哈希值,并将过程与直接从文件获取哈希进行比较

# Path of Microsoft.PowerShell.Utility.psd1
$file = (Get-Module Microsoft.PowerShell.Utility).Path

$hashFromFile = Get-FileHash -Path $file -Algorithm MD5

# Open $file as a stream
$stream = [System.IO.File]::OpenRead($file)
$hashFromStream = Get-FileHash -InputStream $stream -Algorithm MD5
$stream.Close()

Write-Host '### Hash from File ###' -NoNewline
$hashFromFile | Format-List
Write-Host '### Hash from Stream ###' -NoNewline
$hashFromStream | Format-List

# Check both hashes are the same
if ($hashFromFile.Hash -eq $hashFromStream.Hash) {
	Write-Host 'Get-FileHash results are consistent' -ForegroundColor Green
} else {
	Write-Host 'Get-FileHash results are inconsistent!!' -ForegroundColor Red
}

### Hash from File ###

Algorithm : MD5
Hash      : 593D6592BD9B7F9174711AB136F5E751
Path      : C:\WINDOWS\System32\WindowsPowerShell\v1.0\Modules\Microsoft.Powe
            rShell.Utility\Microsoft.PowerShell.Utility.psd1

### Hash from Stream ###

Algorithm : MD5
Hash      : 593D6592BD9B7F9174711AB136F5E751
Path      :

Get-FileHash results are consistent

参数

-Algorithm

指定用于计算指定文件内容的哈希值的加密哈希函数。 加密哈希函数包括无法找到生成相同哈希值的两个不同的输入的属性。 哈希函数通常用于数字签名和数据完整性。 此参数的可接受值为:

  • SHA1
  • SHA256
  • SHA384
  • SHA512
  • MACTripleDES
  • MD5
  • RIPEMD160

如果未指定任何值,或者省略参数,则默认值为 SHA256。

出于安全原因,不再被视为安全的 MD5 和 SHA1 应仅用于简单更改验证,不应用于生成需要保护免受攻击或篡改的文件的哈希值。

类型:String
接受的值:SHA1, SHA256, SHA384, SHA512, MACTripleDES, MD5, RIPEMD160
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-InputStream

指定输入流。

类型:Stream
Position:Named
默认值:None
必需:True
接受管道输入:False
接受通配符:False

-LiteralPath

指定文件的路径。 与 Path 参数不同,LiteralPath 参数的值与类型化完全相同。 不会将任何字符解释为通配符。 如果路径包含转义字符,请将路径括在单引号中。 单引号指示 PowerShell 不要将字符解释为转义序列。

类型:String[]
别名:PSPath
Position:Named
默认值:None
必需:True
接受管道输入:True
接受通配符:False

-Path

将一个或多个文件的路径指定为数组。 允许使用通配符。

类型:String[]
Position:0
默认值:None
必需:True
接受管道输入:False
接受通配符:True

输入

String

可以通过管道将字符串传递给包含一个或多个文件路径的 Get-FileHash cmdlet。

输出

Microsoft.PowerShell.Utility.FileHash

Get-FileHash 返回一个对象,该对象表示指定文件的路径、计算哈希的值以及用于计算哈希的算法。