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 |
輸入
您可以使用管線將字串傳送至包含一或多個檔案路徑 的 get-FileHash Cmdlet。
輸出
Microsoft.PowerShell.Utility.FileHash
Get-FileHash 會傳回物件,代表指定檔案的路徑、計算哈希的值,以及用來計算哈希的演算法。