共用方式為


Get-FileHash

使用指定的哈希演算法計算檔案的哈希值。

語法

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

Description

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 演算法,計算系統管理員從因特網下載之 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 會傳回物件,代表指定檔案的路徑、計算哈希的值,以及用來計算哈希的演算法。