Windows 10: SHA256-Hash mit Bordmitteln prüfen

Xpert

Stammgast
Ich habe mir ca. 1 Woche nach meinem Beitrag ein Powershell-Skript geschrieben, da ich die Funktion selber sehr häufig im Job benötige. Hier als Ergänzung das Skript, welches eventuell sonst noch jemand einsetzen kann:

Code:
#Compare hash of downloaded files
#Author: Xpert for PCTipp 02/2020

	
Add-Type -AssemblyName System.Windows.Forms
$choosePathOption = ""

cls
#Algorithms to choose from
$const_sha1 = "sha1"
$const_sha256 = "sha256"
$const_sha384 = "sha384"
$const_sha512 = "sha512"
$const_MACTripleDES = "MACTripleDES"
$const_md5 = "md5"
$const_RIPEMD160 = "RIPEMD160"

	
$FileBrowser = New-Object System.Windows.Forms.OpenFileDialog -Property @{ InitialDirectory = [Environment]::GetFolderPath('Desktop') }

$choosePathOption = Read-Host -Prompt "Pfad einfügen oder '1' für FileExplorer"

if($choosePathOption -match '1'){
$null = $FileBrowser.ShowDialog()
$pathToFile = $FileBrowser.FileName 
}
else{
$pathToFile = $choosePathOption
}



$ChooseAlgorithmToUse = Read-Host -Prompt "Welchen Algorithmus (0-6)? $const_sha1 (0), $const_sha256 (1), $const_sha384 (2), $const_sha512 (3), $const_MACTripleDES (4), $const_md5 (5),  $const_RIPEMD160 (6)" 

    

    switch ( $ChooseAlgorithmToUse )
    {
        0 { $AlgorithmToUse = "sha1"    }
        1 { $AlgorithmToUse = "sha256"    }
        2 { $AlgorithmToUse = "sha384"   }
        3 { $AlgorithmToUse = "sha512" }
        4 { $AlgorithmToUse = "MACTripleDES"  }
        5 { $AlgorithmToUse = "md5"    }
        6 { $AlgorithmToUse = "RIPEMD160"  }
    }

$pathToFile = $pathToFile -replace ('"', '')

$hashExpected = Read-host -Prompt "Erwarter Hash (z.B. auf Webseite angegeben) zur Kontrolle"
    
Write-Host "Berechne hash und vergleiche...bitte warten"
$hashFromFile = get-filehash -path $pathToFile -Algorithm $AlgorithmToUse | Select -ExpandProperty "Hash"



if($hashExpected -match $hashFromFile){
Write-Host "Vergleich positiv" -ForegroundColor Green
Write-host $hashExpected.ToLower() 
Write-Host $hashFromFile.ToLower()
exit
}
Write-Host "Vergleich negativ" -ForegroundColor Red
Write-host $hashExpected.ToLower()
Write-Host $hashFromFile.ToLower()

Der Code kann in eine *.ps1 Datei gespeichert werden z.B. HashCompare.ps1

Zum Ausführen dann in Powershell/Cmd:

Code:
powershell -executionpolicy bypass -File "[COLOR="#FF8C00"]PfadZumPowerShellFile[/COLOR]\HashCompare.ps1"

oder wenn man bereits im richtigen Pfad mit PowerShell ist:

Code:
".\HashCompare.ps1"


Alternative kann der obige Befehl auch in eine Bat-Datei gepackt werden, dann würde ich aber den PowerShell Code ganz am Schluss mit:

Code:
read-host "Zum beenden eine Taste drücken..."

ergänzen. Ansonsten wird das Fenster nach der Berechnung gleich wieder geschlossen.

Nach der Ausführung kommt folgende Frage:

Code:
Pfad einfügen oder '1' für FileExplorer:

Hier entweder direkt dem Pfad zur Datei via Zwischenablage einfügen oder die 1 drücken und enter um den Dateiexplorer zur Dateiauswahl zu öffnen.

Have fun....
 
Zuletzt bearbeitet:

Gaby Salvisberg

Super-Moderator
Coole Sache :)

Hinweis: Die Zeile «read-host "Zum Beenden eine Taste drücken..."» am Ende des im PowerShell-Scripts hat nichts genützt, wenn man das Script aus einer Batchdatei aufruft. Es schliesst das cmd-Fenster trotzdem.

Gewirkt hat jedoch in der Batchdatei am Schluss noch der Klassiker mit dem einen Wort in der Zeile:
Code:
pause

Und – wichtig, wegen der Umlaute: Nicht UTF-8-kodieren, sondern ANSI (habs in Notepad++ gemacht, da hat es zuerst UTF-8 fabriziert, was dann unschöne Umlaute anzeigte).

Herzliche Grüsse

Gaby
 

Xpert

Stammgast
Hey Gabi

Danke für Dein Feedback. Ich habe es auf verschiedenen Windows-Versionen getestet. Leider funktioniert es je nach Windows- bzw. PowerShell-Version nicht zuverlässig. Bis jetzt ist es mir nicht aufgefallen, da es bei der Arbeit so funktioniert.

Es gibt in diesem Fall aber einen "Trick", den es eigentlich schon länger gibt. In der Batchdatei, welche das PS-Skript aufruft, einfach den Parameter "-NoExit" mit angeben:

Code:
powershell [B]-NoExit[/B] -executionpolicy bypass -File "PfadZumPowerShellFile\HashCompare.ps1"

Zudem habe ich das Skript noch mit einer Nachfrage ausgestattet, ob ein neuer Vergleich gestartet werden soll. Dies ist also Version 1.1:

Code:
#Compare hash of downloaded files
#Author: Xpert for PCtipp 02/2020
#Version 1.1 05.03.2020

function Restart(){
$restart = Read-Host -Prompt "Neuer Vergleich (1), Exit (0)? "

if($restart -match 0){
exit
}
HashCompare
}

function HashCompare(){
	
Add-Type -AssemblyName System.Windows.Forms
$choosePathOption = ""

cls
#Algorithms to choose from
$const_sha1 = "sha1"
$const_sha256 = "sha256"
$const_sha384 = "sha384"
$const_sha512 = "sha512"
$const_MACTripleDES = "MACTripleDES"
$const_md5 = "md5"
$const_RIPEMD160 = "RIPEMD160"

	
$FileBrowser = New-Object System.Windows.Forms.OpenFileDialog -Property @{ InitialDirectory = [Environment]::GetFolderPath('Desktop') }

$choosePathOption = Read-Host -Prompt "Pfad einfügen oder '1' für FileExplorer"

if($choosePathOption -match '1'){
$null = $FileBrowser.ShowDialog()
$pathToFile = $FileBrowser.FileName 
}
else{
$pathToFile = $choosePathOption
}



$ChooseAlgorithmToUse = Read-Host -Prompt "Welchen Algorithmus (0-6)? $const_sha1 (0), $const_sha256 (1), $const_sha384 (2), $const_sha512 (3), $const_MACTripleDES (4), $const_md5 (5),  $const_RIPEMD160 (6)" 

    

    switch ( $ChooseAlgorithmToUse )
    {
        0 { $AlgorithmToUse = "sha1"    }
        1 { $AlgorithmToUse = "sha256"    }
        2 { $AlgorithmToUse = "sha384"   }
        3 { $AlgorithmToUse = "sha512" }
        4 { $AlgorithmToUse = "MACTripleDES"  }
        5 { $AlgorithmToUse = "md5"    }
        6 { $AlgorithmToUse = "RIPEMD160"  }
    }

$pathToFile = $pathToFile -replace ('"', '')

$hashExpected = Read-host -Prompt "Erwarter Hash (z.B. auf Webseite angegeben) zur Kontrolle"
    
Write-Host "Berechne hash und vergleiche...bitte warten"
$hashFromFile = get-filehash -path $pathToFile -Algorithm $AlgorithmToUse | Select -ExpandProperty "Hash"



if($hashExpected -match $hashFromFile){
Write-Host "Vergleich positiv" -ForegroundColor Green
Write-host $hashExpected.ToLower() 
Write-Host $hashFromFile.ToLower()
Restart
}
Write-Host "Vergleich negativ" -ForegroundColor Red
Write-host $hashExpected.ToLower()
Write-Host $hashFromFile.ToLower()
Restart

}

HashCompare
 
Zuletzt bearbeitet von einem Moderator:
Oben