Deatheye 10 Geschrieben 30. September 2009 Melden Teilen Geschrieben 30. September 2009 Hi Ich versuche gerade ein script zu schreiben, dass Dateien und Ordner von einem Verzeichnis in ein anderes kopiert und danach alle Dateien vergleicht. Eigentlich wollte ich dies zuerst mit dem aufruf einer Exe erreichen die die Berechnungen durchführt. Leider funktionierte dies teilweise nicht und das Programm meldete die zu prüfende Datei existiere nicht. Da dies sowohl andere Mitarbeiter und auch ich nicht korrigieren konnten habe ich mich dazu entschlossen das ganze in Powershell selber zu berechnen. Leider funktioneirt auch dies irgendwie nicht und ich verstehe nicht warum. Ich erhalte immer den selben hash als Ausgabe. Im Code ist auch noch eine andere Funktion die MD5 hash berechnen sollte auskommentiert. Bei dieser wurde der hash nur auf Grund des Dateinamens berechnet was uns nicht wirklich was bringt. Ich erhalte jedesmal den Wert A0FD1359C23144777654BDBBE21ED104 . Bis jetzt konnte ich nicht herausfinden warum. Da ich das erste mal mit Powershell arbeite könnte es ein simples Problem sein bzw. Total fehlendes Grundverständnis. ^^' Funktion: #function md5 ($inputString1) #{ #$inputsring = New-Object System.IO.FileInfo($inpuString1) #$cryptoServiceProvider = [system.Security.Cryptography.MD5CryptoServiceProvider]; #$hashAlgorithm = new-object $cryptoServiceProvider #$hashByteArray1 = $hashAlgorithm.ComputeHash([Char[]]$inputString1); #$hashByteArray2 = $hashAlgorithm.ComputeHash([Char[]]$inputString2); #foreach ($byte in $hashByteArray1) { $result1 += “{0:X2}” -f $byte} #foreach ($byte in $hashByteArray2) { $result2 += “{0:X2}” -f $byte } #Write-Output $result1 #Write-Host $result2 #} function copyrec($target,$source) { Copy-Item -Recurse $source $target Set-Location -Path $source Set-Location -Path .. $nsource = Get-Location $a = Get-ChildItem -Recurse $nsource | sort Fullname $b = Get-ChildItem -Recurse $target | sort Fullname foreach ($c in $a) { if(!$c.PSIsContainer) { $provider = New-Object System.Security.Cryptography.MD5CryptoServiceProvider $inFileInfo = New-Object System.IO.FileInfo($c.FullName) $inStream = $inFileInfo.OpenRead() $hashBytes = $provider.ComputeHash($inStream) foreach ($byte in $hashBytes) { $hash = $hash + $byte.ToString("X2") } $tmp = $hash $tmp = $tmp + " " + $c.FullName Write-Output $tmp | Out-File c:\powershelltest\Asource.txt -Append } } foreach ($c in $b) { if (!$c.PSIsContainer) { $provider = New-Object System.Security.Cryptography.MD5CryptoServiceProvider $inFileInfo = New-Object System.IO.FileInfo($c.FullName) $inStream = $inFileInfo.OpenRead() $hashBytes = $provider.ComputeHash($inStream) foreach ($byte in $hashBytes) { $hash = $hash + $byte.ToString("X2") } $tmp = $hash $tmp = $tmp + " " + $c.FullName Write-Output $tmp | Out-File c:\powershelltest\Atarget.txt -Append } } } Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 30. September 2009 Melden Teilen Geschrieben 30. September 2009 Die Variable $hash sollte vor jedem Durchlauf zurückgesetzt werden: $hashBytes = $provider.ComputeHash($inStream) $hash = "" foreach ($byte in $hashBytes) { $hash = $hash + $byte.ToString("X2") } Zitieren Link zu diesem Kommentar
Deatheye 10 Geschrieben 30. September 2009 Autor Melden Teilen Geschrieben 30. September 2009 :schreck: OK das war schon mal ein ****er Fehler. Eigentlich nicht den den ich meinte aber erklärt warum ich teilweise im txt file so riesige Zahlenreihen hatte.. Danke :D Das Problem warum die Hash werte identisch waren lag daran, dass sämmtliche Dateien die ich prüfte identischen Inhalt hatten und nur nen anderen Namen. -.- Ich hatte die Ordnerstruktur vor einigen Tagen erstellt um den kopierbefehl zu testen und vergessen, dass ich überall nur identische Daten reingetan habe -.- Manchmal echt bescheurt woran ich mir die Zähna ausbeise... selber generiert Probleme ... Vielen Dank nochmal :D Jetzt das ganze noch erweitern damit es nur daten auf Grund eines bestimmten Datums kopiert ^^ Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.