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

String

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.