Get-FileHash

Berechnet den Hashwert für eine Datei mit einem angegebenen Hashalgorithmus.

Syntax

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

Beschreibung

Das Get-FileHash Cmdlet 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 und ohne den Hashwert zu ändern. Ebenso kann der Inhalt der Datei geändert werden, ohne den Namen oder die Erweiterung zu ändern. Durch die bloße Änderung eines einzelnen Zeichens im Inhalt einer Datei ändert sich jedoch auch deren Hashwert.

Hashwerte bieten eine im Hinblick auf die Kryptografie sichere Möglichkeit, zu gewährleisten, dass 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. Mithilfe von Hashwerten können Sie auch bestimmen, ob zwei unterschiedliche Dateien genau den gleichen Inhalt aufweisen. Wenn die Hashwerte von zwei Dateien identisch sind, sind die Inhalte der Dateien ebenfalls identisch.

Standardmäßig verwendet das Get-FileHash Cmdlet 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 Get-FileHash Cmdlet verwendet, um den Hashwert für die /etc/apt/sources.list Datei zu berechnen. Der verwendete Hashalgorithmus ist die Standardeinstellung SHA256. Die Ausgabe wird an das Format-List Cmdlet weitergeleitet, um die Ausgabe als Liste zu formatieren.

Get-FileHash /etc/apt/sources.list | Format-List

Algorithm : SHA256
Hash      : 3CBCFDDEC145E3382D592266BE193E5BE53443138EE6AB6CA09FF20DF609E268
Path      : /etc/apt/sources.list

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

In diesem Beispiel wird das Get-FileHash Cmdlet 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 Format-List Cmdlet 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 verwenden wir System.Net.WebClient , um ein Paket von der PowerShell-Releaseseite herunterzuladen. Auf der Releaseseite wird auch der SHA256-Hash jeder Paketdatei dokumentiert. Wir können den veröffentlichten Hashwert mit dem wert vergleichen, mit Get-FileHashdem wir berechnen.

$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 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 bei digitalen Signaturen und für die Datenintegrität verwendet. Zulässige Werte für diesen Parameter:

  • SHA1
  • SHA256
  • SHA384
  • SHA512
  • MD5

Wenn kein Wert angegeben oder der Parameter weggelassen wird, ist der Standardwert SHA256.

MD5 und SHA1, die nicht mehr als sicher eingestuft werden, sollten aus Sicherheitsgründen nur zur einfachen Überprüfung von Änderungen verwendet werden und nicht zum Generieren von Hashwerten für Dateien, die vor Angriffen oder Manipulation geschützt werden müssen.

Typ:String
Zulässige Werte:SHA1, SHA256, SHA384, SHA512, MD5
Position:1
Standardwert:SHA256
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-InputStream

Gibt den Eingabedatenstrom an.

Typ:Stream
Position:0
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-LiteralPath

Gibt den Pfad zu einer Datei an. Im Gegensatz zum Path-Parameter wird der Wert des LiteralPath-Parameters genau so verwendet, wie er eingegeben wird. Es werden keine Zeichen als Platzhalter interpretiert. Wenn der Pfad Escapezeichen enthält, müssen Sie ihn in einfache Anführungszeichen einschließen. Einfache Anführungszeichen weisen PowerShell an, Zeichen nicht als Escapesequenzen zu interpretieren.

Typ:String[]
Aliase:PSPath, LP
Position:0
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:False

-Path

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

Typ:String[]
Position:0
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:True

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.