Freigeben über


Get-FileHash

Berechnet den Hashwert für eine Datei mithilfe eines angegebenen Hashalgorithmus.

Syntax

Path (Standard)

Get-FileHash
    [-Path] <String[]>
    [-Algorithm <String>]
    [<CommonParameters>]

LiteralPath

Get-FileHash
    -LiteralPath <String[]>
    [-Algorithm <String>]
    [<CommonParameters>]

Stream

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

Beschreibung

Das cmdlet Get-FileHash berechnet den Hashwert für eine Datei mithilfe eines angegebenen Hashalgorithmus. Ein Hashwert ist ein eindeutiger Wert, der dem Inhalt der Datei entspricht. Anstatt den Inhalt einer Datei anhand des Dateinamens, der Erweiterung oder einer anderen Bezeichnung zu identifizieren, weist ein Hash dem Inhalt einer Datei einen eindeutigen Wert zu. Dateinamen und Erweiterungen können geändert werden, ohne den Inhalt der Datei zu ändern, und ohne den Hashwert zu ändern. Ebenso kann der Inhalt der Datei geändert werden, ohne den Namen oder die Erweiterung zu ändern. Das Ändern eines einzelnen Zeichens im Inhalt einer Datei ändert jedoch den Hashwert der Datei.

Der Zweck von Hashwerten besteht darin, eine kryptografisch sichere Möglichkeit bereitzustellen, um zu überprüfen, ob der Inhalt einer Datei nicht geändert wurde. Während einige Hashalgorithmen, einschließlich MD5 und SHA1, nicht mehr als sicher gegen Angriffe betrachtet werden, besteht das Ziel eines sicheren Hashalgorithmus darin, den Inhalt einer Datei nicht zu ändern – entweder versehentlich oder durch böswillige oder nicht autorisierte Versuche – und denselben Hashwert beizubehalten. Sie können auch Hashwerte verwenden, um zu ermitteln, ob zwei verschiedene Dateien genau denselben Inhalt aufweisen. Wenn die Hashwerte zweier Dateien identisch sind, sind die Inhalte der Dateien ebenfalls identisch.

Standardmäßig verwendet das cmdlet Get-FileHash den SHA256-Algorithmus, obwohl jeder vom Zielbetriebssystem unterstützte Hashalgorithmus verwendet werden kann.

Beispiele

Beispiel 1: Berechnen des Hashwerts für eine Datei

In diesem Beispiel wird das Cmdlet Get-FileHash verwendet, um den Hashwert für die powershell.exe Datei zu berechnen. Der verwendete Hashalgorithmus ist die Standardeinstellung SHA256. Die Ausgabe wird an das Cmdlet Format-List weitergeleitet, um die Ausgabe als Liste zu formatieren.

Get-FileHash $PSHOME\powershell.exe | Format-List
Algorithm : SHA256
Hash      : 908B64B1971A979C7E3E8CE4621945CBA84854CB98D76367B791A6E22B5F6D53
Path      : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

Beispiel 2: Berechnen des Hashwerts für eine ISO-Datei

In diesem Beispiel werden das Cmdlet Get-FileHash und der SHA384- Algorithmus verwendet, um den Hashwert für eine ISO-Datei zu berechnen, die ein Administrator aus dem Internet heruntergeladen hat. Die Ausgabe wird an das Cmdlet Format-List weitergeleitet, um die Ausgabe als Liste zu formatieren.

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

Beispiel 3: Berechnen des Hashwerts eines Datenstroms

In diesem Beispiel wird System.Net.WebClient- verwendet, um ein Paket von der PowerShell-Releaseseiteherunterzuladen. Auf der Releaseseite wird auch der SHA256-Hash jeder Paketdatei dokumentiert. Wir können den veröffentlichten Hashwert mit dem wert vergleichen, den wir mit Get-FileHashberechnen.

$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

Beispiel 4: Berechnen des Hashs einer Zeichenfolge

PowerShell stellt kein Cmdlet zum Berechnen des Hashs einer Zeichenfolge bereit. Sie können jedoch eine Zeichenfolge in einen Datenstrom schreiben und den InputStream Parameter von Get-FileHash verwenden, um den Hashwert abzurufen.

$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

Parameter

-Algorithm

Gibt die kryptografische Hashfunktion an, die zum Berechnen des Hashwerts des Inhalts der angegebenen Datei oder des angegebenen Datenstroms verwendet werden soll. Eine kryptografische Hashfunktion verfügt über die Eigenschaft, die nicht zu beachten ist, um zwei verschiedene Dateien mit demselben Hashwert zu finden. Hashfunktionen werden häufig mit digitalen Signaturen und für die Datenintegrität verwendet. Die zulässigen Werte für diesen Parameter sind:

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

Wenn kein Wert angegeben wird oder der Parameter nicht angegeben wird, lautet der Standardwert SHA256.

Aus Sicherheitsgründen sollten MD5 und SHA1, die nicht mehr als sicher gelten, nur für die einfache Änderungsüberprüfung verwendet werden und nicht verwendet werden, um Hashwerte für Dateien zu generieren, die Schutz vor Angriffen oder Manipulationen erfordern.

Parametereigenschaften

Typ:String
Standardwert:SHA256
Zulässige Werte:SHA1, SHA256, SHA384, SHA512, MACTripleDES, MD5, RIPEMD160
Unterstützt Platzhalter:False
Nicht anzeigen:False

Parametersätze

(All)
Position:Named
Obligatorisch:False
Wert aus Pipeline:False
Wert aus Pipeline nach dem Eigenschaftsnamen:False
Wert aus verbleibenden Argumenten:False

-InputStream

Gibt den Eingabedatenstrom an.

Parametereigenschaften

Typ:Stream
Standardwert:None
Unterstützt Platzhalter:False
Nicht anzeigen:False

Parametersätze

Stream
Position:Named
Obligatorisch:True
Wert aus Pipeline:False
Wert aus Pipeline nach dem Eigenschaftsnamen:False
Wert aus verbleibenden Argumenten:False

-LiteralPath

Gibt den Pfad zu einer Datei an. Anders als die Pfad wird der Wert des Parameters LiteralPath Parameter wird genau so verwendet, wie er eingegeben wurde. Es werden keine Zeichen als Wildcardzeichen interpretiert. Wenn der Pfad Escapezeichen enthält, schließen Sie den Pfad in einfache Anführungszeichen ein. Einfache Anführungszeichen weisen PowerShell an, Zeichen nicht als Escapesequenzen zu interpretieren.

Parametereigenschaften

Typ:

String[]

Standardwert:None
Unterstützt Platzhalter:False
Nicht anzeigen:False
Aliase:PSPath

Parametersätze

LiteralPath
Position:Named
Obligatorisch:True
Wert aus Pipeline:False
Wert aus Pipeline nach dem Eigenschaftsnamen:True
Wert aus verbleibenden Argumenten:False

-Path

Gibt den Pfad zu einer oder mehreren Dateien als Array an. Platzhalterzeichen sind zulässig.

Parametereigenschaften

Typ:

String[]

Standardwert:None
Unterstützt Platzhalter:True
Nicht anzeigen:False

Parametersätze

Path
Position:0
Obligatorisch:True
Wert aus Pipeline:False
Wert aus Pipeline nach dem Eigenschaftsnamen:False
Wert aus verbleibenden Argumenten:False

CommonParameters

Dieses Cmdlet unterstützt die allgemeinen Parameter -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction und -WarningVariable. Weitere Informationen findest du unter about_CommonParameters.

Eingaben

String

Sie können eine Zeichenfolge mit einem Pfad zu einer Datei an dieses Cmdlet weiterleiten.

Ausgaben

Microsoft.PowerShell.Utility.FileHash

Dieses Cmdlet gibt ein Objekt zurück, das den Pfad zur angegebenen Datei, den Wert des berechneten Hashs und den Algorithmus darstellt, der zum Berechnen des Hashs verwendet wird.