2016-07-18 9 views
1

Ich versuche, eine Hash-Funktion auf alle Dateien in einem Ordner als eine Art Versionskontrolle anzuwenden. Die Idee besteht darin, eine Testdatei zu erstellen, die den Namen der Datei und die generierte Prüfsumme auflistet. Graben Online fand ich einige Code, der den Trick (in der Theorie) tun sollten:Powershell nicht den richtigen Pfad für eine Datei als Argument

$list = Get-ChildItem 'C:\users\public\documents\folder' -Filter *.cab 
$sha1 = New-Object System.Security.Cryptography.SHA1CryptoServiceProvider 

foreach ($file in $list) { 
$return = "" | Select Name, Hash 

$returnname = $file.Name 
$returnhash = [System.BitConverter]::ToString($sha1.ComputeHash([System.IO.File]::ReadAllBytes($file.Name))) 
$return = "$returnname,$returnhash" 

Out-File -FilePath .\mylist.txt -Encoding Default -InputObject ($return) -Append 
} 

Wenn ich es aber laufen lasse, erhalte ich einen Fehler, da es die Dateien von c zu lesen versucht: \ users mich \ \, die Ordner, in dem ich das Skript ausführe. Und die Datei c: \ users \ me \ aa.cab existiert nicht und kann daher nicht erreicht werden.

Ich habe alles versucht, was mir einfällt, aber kein Glück. Ich benutze Windows 7 mit PowerShell 2.0, wenn das irgendwie hilft.

Antwort

2

Versuchen Sie mit .FullName statt nur .Name.

$returnhash = [System.BitConverter]::ToString($sha1.ComputeHash([System.IO.File]::ReadAllBytes($file.FullName)))

+0

Das war der Trick. Danke vielmals! – Variax

Verwandte Themen