PowerShell Prüfsumme von Dateien ermitteln

Aus Deskmodder Wiki
Version vom 25. März 2017, 16:14 Uhr von Moinmoin (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)


Wer eine Datei von Punkt A zu Punkt B kopieren möchte, dem kann eine Prüfsumme hilfreich sein. Damit kann man nachprüfen, ob es sich bei der kopierten Datei um ein und die selbe handelt. Ist der Hash.Wert der gleiche, ist die Datei auch identisch. Ist der Hash-Wert nicht der selbe, muss man die Datei neu kopieren.

Ab PowerShell Version 4, die seit Windows 8 / Windows Server 2012 mit dabei ist, gibt es auch einen eigenen cmdlet namens "Get-Filehash". Mittels "-Algorithm" lässt sich auch noch den gewünschten Algorithmus wählen.


Auch interessant:


News
Das Tutorial wird natürlich weiter aktualisiert. Auch du kannst mithelfen. Schick uns deine Nachricht über die Tipp-Box. Wichtig: Einige der Windows 10 Tutorials sind auch für Windows 11 gültig
  • PowerShell in die Suche der Taskleiste eingeben und starten
    • Man kann auch die Eingabeaufforderung (Administrator) nutzen. Hier gibt man einfach powershell ein und kann die Eingaben hier genau so vornehmen.

-Algorithm

Gibt die kryptografische Hashfunktion an, die zum Berechnen des Hashwertes des Inhalts der angegebenen Datei verwendet wird. Eine kryptografische Hashfunktion enthält die Eigenschaft, dass es nicht möglich ist, zwei verschiedene Eingaben zu finden, die dieselben Hashwerte erzeugen. Hash-Funktionen werden häufig mit digitalen Signaturen und für Datenintegrität verwendet. Die zulässigen Werte für diesen Parameter sind:

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

Aus Sicherheitsgründen sollten MD5 und SHA1, die nicht mehr als sicher betrachtet werden, nur für eine einfache Änderungsvalidierung verwendet werden und sollten nicht verwendet werden, um Hashwerte für Dateien zu erzeugen, die Schutz vor Angriffen oder Manipulationen erfordern.

Pruefsumme-ermitteln-powershell.jpg

Als Beispiel werde ich hier den Hash einer Windows 10 Iso Datei berechnen.


PS C:\WINDOWS\system32> get-filehash C:\Users\lem0th\Desktop\Windows.iso -Algorithm SHA384 | Format-List


Algorithm : SHA384
Hash      : 555073E147487CDC5428EED6FF18CEB3973F7322C461FF9AF0629A37ECF7CDF98912F931641C2C46C10F7F9E3E29B50A
Path      : C:\Users\lem0th\Desktop\Windows.iso

Dieser Befehl verwendet das Cmdlet Get-FileHash und den SHA384-Algorithmus, um den Hashwert für eine ISO-Datei zu berechnen, die ich aus dem Internet heruntergeladen hat. Die Ausgabe wird zum Format-List-Cmdlet geleitet, um die Ausgabe als Liste zu formatieren.

Als zweites Beispiel werde ich den Hash der PowerShell.exe berechnen:

PS C:\WINDOWS\system32> get-filehash $pshome\powershell.exe | Format-List


Algorithm : SHA256
Hash      : BA4038FD20E474C047BE8AAD5BFACDB1BFC1DDBE12F803F473B7918D8D819436
Path      : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe


Dieser Befehl verwendet wieder das Cmdlet Get-FileHash und den Standard SHA256-Algorithmus, um den Hashwert der PowerShell.exe zu berechnen.

Pruefsumme-ermitteln-powershell-1.jpg

Um nun als weiteres Beispiel den Hash einer .7z (7zip eigenes Archiv) zu berechnen, geht man folgendermaßen vor:

PS C:\WINDOWS\system32> get-filehash -path C:\Users\lem0th\Desktop\Tuts.7z -Algorithm SHA256

Algorithm       Hash                                                                   Path
---------       ----                                                                   ----
SHA256          38F3B3F4800A6E59C5DFCBC222ADB6ED6987087E9A90E25D39E1C0CCD3EAEA97       C:\Users\lem0th\Desktop\Tuts.7z



-Path

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

Type: String[]
Parameter Sets: Path
Aliases:

Required: True
Position: 0
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

Um nun die Prüfsumme zu vergleichen, muss man folgenden Befehl eingeben:

Get-FileHash -Path C:\DateiName -Algorithm SHA256| Compare-Object -ReferenceObject "2F9296722Cd04054566D98F97649B09E" -DifferenceObject {$_.Hash}

Wo die "2F9296722Cd04054566D98F97649B09E" steht, muss der jeweilige Hash-Code von der Datei rein, welche Überprüft werden soll.


Pruefsumme-ermitteln-powershell-2.jpg

Als Beispiel verwende ich mein Tut.7z Archiv auf dem Desktop.

PS C:\WINDOWS\system32> Get-FileHash -Path C:\Users\lem0th\Desktop\Tuts.7z -Algorithm SHA256 | Compare-Object -Reference
Object "38F3B3F4800A6E59C5DFCBC222ADB6ED6987087E9A90E25D39E1C0CCD3EAEA9" -DifferenceObject {$_.Hash}

InputObject                                                      SideIndicator
-----------                                                      -------------
38F3B3F4800A6E59C5DFCBC222ADB6ED6987087E9A90E25D39E1C0CCD3EAEA97 =>
38F3B3F4800A6E59C5DFCBC222ADB6ED6987087E9A90E25D39E1C0CCD3EAEA9  <=


Hier kann man sehen, dass die Werte nicht übereinstimmen mit dem Orginal.

Sollte keine solche Ausgabe erscheinen, heißt dies, dass die Hashes übereinstimmen.

Sollte man eine PowerShell haben, welche nicht die Version 4 besitzt, habe ich auf diesem Blog ein nützliches Skript gefunden, welches quasi das cmdlet Get-FileHash ersetzt:

param

(

[Parameter(Mandatory=$true)]

[String]

$Path,



[ValidateSet("MD5", "SHA1", "SHA256", "SHA512")]

$Algorithm = "MD5",



[Parameter(Mandatory=$true)]

[String]

$Hash

)



# Calculate hash of given file with given algorithm

$algo = [System.Security.Cryptography.HashAlgorithm]::Create("$Algorithm")

$stream = New-Object System.IO.FileStream($path, [System.IO.FileMode]::Open)

$StringBuilder = New-Object System.Text.StringBuilder

$algo.ComputeHash($stream) | % { [void] $StringBuilder.Append($_.ToString("x2")) }

$fileHash = $StringBuilder.ToString()

$stream.Dispose()



# Case insensitive comparison. If variable $compared is 0 the hashes are equal.

$compared = [string]::Compare($fileHash, $Hash, $True)



Write-Host ""

Write-Host Algorithm : $Algorithm

Write-Host File Hash : $fileHash

Write-Host Given Hash: $Hash

# Check if hashes are equal

if ($compared -eq "0"){

    Write-Host "The hashes are equal." -ForegroundColor Green}

else{

    Write-Warning "The hashes are NOT equal."}

Write-Host ""

Dieses Script muss man sich kopieren und in eine Textdatei einfügen, welche man dann mit der Dateiendung .ps1 abspeichern tut.

Um dieses Skript dann noch laden zu können, müssen wir die Sicherheitsstufe der PowerShell runterschalten, da dies Skript nicht signiert ist, und mit der Standard-Sicherheitsstufe eine Fehlermeldung kommt.

Ich empfehle, diese Sicherheitsstufe:

Set-ExecutionPolicy RemoteSigned

Damit werden nur lokale Skripte ausgeführt, die von einem Vertrauenswürdigem Autor stammen.

Man kann es auch wieder so umändern, dass nur Skripte ausgeführt werden sollen, welche digital signiert sind:

Set-ExecutionPolicy AllSigned
Pruefsumme-ermitteln-powershell-3.jpg

Um dann das Script auszuführen, macht man folgendes:

PS C:\users\lem0th\desktop> .\script.ps1 -Path E:\Test.7z -Algorithm SHA256 -Hash 5E1D060360A9C2B50FC767B77E3F78
FF1A6141CCCACCA13FC55D305143760C2B

Algorithm : SHA256
File Hash : 5e1d060360a9c2b50fc767b77e3f78ff1a6141cccacca13fc55d305143760c2b
Given Hash: 5E1D060360A9C2B50FC767B77E3F78FF1A6141CCCACCA13FC55D305143760C2B
The hashes are equal.


Pruefsumme-ermitteln-powershell-4.jpg

Sollte der Wert nicht übereinstimmen, kommt folgendes:

PS C:\users\lem0th\desktop> .\script.ps1 -Path E:\Test.7z -Algorithm SHA256 -Hash 5E1D060360A9C2B50FC767B77E3F78
FF1A6141CCCACCA13FC55D305143760C2

Algorithm : SHA256
File Hash : 5e1d060360a9c2b50fc767b77e3f78ff1a6141cccacca13fc55d305143760c2b
Given Hash: 5E1D060360A9C2B50FC767B77E3F78FF1A6141CCCACCA13FC55D305143760C2
WARNUNG: The hashes are NOT equal.


Danke an Lem0th für das Tutorial


Fragen zu Windows 10?

Info
Du hast noch einen Tipp oder Änderung zum Tutorial? Dann schreibe uns deine Ergänzung über unsere Tipp-Box, damit unser Wiki immer aktuell bleibt. Bitte den Namen oder Link mit angeben.

Du hast Fragen oder benötigst Hilfe? Dann nutze bitte unser Forum und nicht die Tipp-Box! Auch Gäste (ohne Registrierung) können bei uns Fragen stellen oder Fragen beantworten. - Link zum Forum | Forum Windows 10

Tagesaktuelle News im Blog: - Hauptseite | Kategorie: Windows 10 | Kategorie: Apps für Windows
Neue Tutorials für Windows 10 Top 10 der Tutorials für Windows 10