Get-FileHash
Beräknar hash-värdet för en fil med hjälp av en angiven hash-algoritm.
Syntax
Get-FileHash
[-Path] <String[]>
[-Algorithm <String>]
[<CommonParameters>]
Get-FileHash
-LiteralPath <String[]>
[-Algorithm <String>]
[<CommonParameters>]
Get-FileHash
-InputStream <Stream>
[-Algorithm <String>]
[<CommonParameters>]
Description
Cmdleten Get-FileHash
beräknar hash-värdet för en fil med hjälp av en angiven hash-algoritm.
Ett hash-värde är ett unikt värde som motsvarar innehållet i filen. I stället för att identifiera innehållet i en fil med dess filnamn, filnamnstillägg eller annan beteckning tilldelar en hash ett unikt värde till innehållet i en fil. Filnamn och filnamnstillägg kan ändras utan att innehållet i filen ändras och utan att hash-värdet ändras. På samma sätt kan filens innehåll ändras utan att ändra namnet eller tillägget. Men om du ändrar ett enda tecken i innehållet i en fil ändras filens hash-värde.
Syftet med hash-värden är att tillhandahålla ett kryptografiskt säkert sätt att kontrollera att innehållet i en fil inte har ändrats. Även om vissa hash-algoritmer, inklusive MD5 och SHA1, inte längre anses vara säkra mot angrepp, är målet med en säker hashalgoritm att göra det omöjligt att ändra innehållet i en fil – antingen av misstag eller genom skadligt eller obehörigt försök – och behålla samma hashvärde. Du kan också använda hash-värden för att avgöra om två olika filer har exakt samma innehåll. Om hash-värdena för två filer är identiska är även innehållet i filerna identiskt.
Som standard Get-FileHash
använder cmdleten SHA256-algoritmen, även om alla hash-algoritmer som stöds av måloperativsystemet kan användas.
Exempel
Exempel 1: Beräkna hashvärdet för en fil
I det här exemplet används cmdleten Get-FileHash
för att beräkna hashvärdet för Powershell.exe
filen.
Den hash-algoritm som används är standardvärdet SHA256. Utdata skickas till cmdleten Format-List
för att formatera utdata som en lista.
Get-FileHash $PSHOME\powershell.exe | Format-List
Algorithm : SHA256
Hash : 908B64B1971A979C7E3E8CE4621945CBA84854CB98D76367B791A6E22B5F6D53
Path : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Exempel 2: Beräkna hashvärdet för en ISO-fil
I det här exemplet används cmdleten Get-FileHash
och SHA384-algoritmen för att beräkna hash-värdet för en ISO-fil som en administratör har laddat ned från Internet. Utdata skickas till cmdleten Format-List
för att formatera utdata som en lista.
Get-FileHash C:\Users\user1\Downloads\Contoso8_1_ENT.iso -Algorithm SHA384 | Format-List
Algorithm : SHA384
Hash : 20AB1C2EE19FC96A7C66E33917D191A24E3CE9DAC99DB7C786ACCE31E559144FEAFC695C58E508E2EBBC9D3C96F21FA3
Path : C:\Users\user1\Downloads\Contoso8_1_ENT.iso
Exempel 3: Beräkna hashvärdet för en dataström
I det här exemplet använder vi System.Net.WebClient för att ladda ned ett paket från powershell-versionssidan. Versionssidan dokumenterar även SHA256-hashen för varje paketfil. Vi kan jämföra det publicerade hashvärdet med det vi beräknar med Get-FileHash
.
$wc = [System.Net.WebClient]::new()
$pkgurl = 'https://github.com/PowerShell/PowerShell/releases/download/v6.2.4/powershell_6.2.4-1.debian.9_amd64.deb'
$publishedHash = '8E28E54D601F0751922DE24632C1E716B4684876255CF82304A9B19E89A9CCAC'
$FileHash = Get-FileHash -InputStream ($wc.OpenRead($pkgurl))
$FileHash.Hash -eq $publishedHash
True
Exempel 4: Beräkna hashen för en sträng
PowerShell tillhandahåller ingen cmdlet för att beräkna hashen för en sträng. Du kan dock skriva en sträng till en dataström och använda parametern Get-FileHash
InputStream för för att hämta hash-värdet.
$stringAsStream = [System.IO.MemoryStream]::new()
$writer = [System.IO.StreamWriter]::new($stringAsStream)
$writer.write("Hello world")
$writer.Flush()
$stringAsStream.Position = 0
Get-FileHash -InputStream $stringAsStream | Select-Object Hash
Hash
----
64EC88CA00B268E5BA1A35678A1B5316D212F4F366B2477232534A8AECA37F3C
Parametrar
-Algorithm
Anger den kryptografiska hash-funktion som ska användas för att beräkna hash-värdet för innehållet i den angivna filen eller dataströmmen. En kryptografisk hash-funktion har egenskapen att det inte går att hitta två olika filer med samma hashvärde. Hash-funktioner används ofta med digitala signaturer och för dataintegritet. De acceptabla värdena för den här parametern är:
- SHA1
- SHA256
- SHA384
- SHA512
- MACTripleDES
- MD5
- RIPEMD160
Om inget värde anges, eller om parametern utelämnas, är standardvärdet SHA256.
Av säkerhetsskäl bör MD5 och SHA1, som inte längre anses vara säkra, endast användas för enkel ändringsverifiering och bör inte användas för att generera hash-värden för filer som kräver skydd mot angrepp eller manipulering.
Typ: | String |
Godkända värden: | SHA1, SHA256, SHA384, SHA512, MACTripleDES, MD5, RIPEMD160 |
Position: | Named |
Standardvärde: | SHA256 |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-InputStream
Anger indataströmmen.
Typ: | Stream |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | True |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-LiteralPath
Anger sökvägen till en fil. Till skillnad från parametern Path används värdet för parametern LiteralPath precis som det skrivs. Inga tecken tolkas som jokertecken. Om sökvägen innehåller escape-tecken omger du sökvägen inom enkla citattecken. Enkla citattecken instruerar PowerShell att inte tolka tecken som escape-sekvenser.
Typ: | String[] |
Alias: | PSPath |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | True |
Godkänn pipeline-indata: | True |
Godkänn jokertecken: | False |
-Path
Anger sökvägen till en eller flera filer som en matris. Jokertecken tillåts.
Typ: | String[] |
Position: | 0 |
Standardvärde: | None |
Obligatorisk: | True |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | True |
Indata
Du kan skicka en sträng som innehåller en sökväg till en fil till den här cmdleten.
Utdata
Microsoft.PowerShell.Utility.FileHash
Den här cmdleten returnerar ett objekt som representerar sökvägen till den angivna filen, värdet för den beräknade hashen och algoritmen som används för att beräkna hashen.