none
GET-FileHash Frage RRS feed

  • Frage

  • Hallo

    Ich bin ein neuling was die PS betrifft und würde mich gern ein wenig is die basics einarbeiten. Dazu habe ich mir eine eigene aufgabe gestellt:

    1. Zwei Files zu hashen und als "künfitgen" vergleichswert in eine Script Variable ablegen (damit habe ich mal kein Problem)

    2. Diese zusammenführen und als einen Vergleichsstring zu führen

    3. Auf anderen Rechnern die selben Files mit GET-FileHash auslesen und jeweils in eine Variable speichern.

    4. Diese dann ebenfalls zusammenführen

    5. Das Ergebnis der beiden zusammenführungen vergleichen und je nachdem ob ein unterschied ist, eine Meldung an den Benutzer liefern...

    Soweit der Plan...ich habe dann aber bald bemerkt, dass die Werte aus dem get-filehash sich irgendwie nicht zusammenführen lassen...hier endet dann mein wissen, wie ich weiter komme.

    Kurz mal mein erster Ansatz:

    #Vergleichsvariblen definieren

    $hashexe = "FA2AAFEE09BE9B98866767BF7D175E4A"
    $hashjs = "1778724C3276245FC40E1B081D91E9E3"

    #Vergleichsvariblen definieren und zusammenführen
    $hashexe = "FA2AAFEE09BE9B98866767BF7D175E4A"
    $hashjs = "1778724C3276245FC40E1B081D91E9E3"
    $md5ref = $hashexe + "_" + $hashjs
    
    #Pruefen (nur zum testen)
    $md5ref
    
    #Ab hier steck ich (variante 1)
    $checkexe = @(Get-FileHash -Path "C:\tmp\client.exe" -Algorithm MD5 | Format-Wide -Property Hash)
    $checkjs = @(Get-FileHash -Path "C:\tmp\client.js" -Algorithm MD5 | Format-Wide -Property Hash)
    $md5check = $checkexe + "_" + $checkjs
    #Prüfen (nur zum testen) output falsch
    $md5check
    
    #Variante 2 
    [string[]]$checkexe = @(Get-FileHash -Path "C:\tmp\client.exe" -Algorithm MD5) | Format-Wide -Property Hash)
    [string[]]$checkjs = @(Get-FileHash -Path "C:\tmp\client.js" -Algorithm MD5 | Format-Wide -Property Hash)
    $md5check = $checkexe + "_" + $checkjs
    #Prüfen (nur zum testen) output falsch
    $md5check
    
    #Variante 3
    Set-Variable -Name "checkexe" -Value (Get-FileHash -Path "C:\tmp\client.exe" -Algorithm MD5) | Format-Wide) -Property Hash)
    Set-Variable -Name "checkjs" -Value (Get-FileHash -Path "C:\tmp\client.js" -Algorithm MD5) |  Format-Wide -Property Hash)
    $md5check = $checkexe + "_" + $checkjs
    #Prüfen (nur zum testen) output falsch
    $md5check

    Würde ich für die Varible 

    $md5check

    einen korrekten output bekommen, könnte ich vergleichen...Aber ich weiß nicht wie ich an die Werte komme.

    Wie gesagt, ich bin neu in der materie...und freu mich auf hilfe...Danke

    Montag, 30. September 2019 05:24

Antworten

  • Wenn du format-wide weg lässt, würdest du versuchen, zwei Objekte zu addieren. 

    Mein zweites Codebeispiel zeigt z.B. einen Weg, wie du eine Property eines Objekts selektieren kannst.

    Gruß


    Montag, 30. September 2019 06:14
  • Danach fehlt dir noch der Vergleich.
    Hierzu kann man HashTables verwenden:https://www.windowspro.de/script/hash-table-powershell-erzeugen-elemente-hinzufuegen-loeschen-sortieren

    $D1 = @{}  // Tabelle 1
    $D2 = @{}  // Tabelle 2

    Per $D1[$Hash1] = $File fülle ich das 1. Array.
    in der 2. Schleife für das 2. Verzeichnis prüfe ich per $D1.ContainsKey($Hash2) ob die Datei bekannt und Identisch ist.
    Wenn ja, kann ich den Eintrag per $D1.Remove($Hash2) den Eintrag entfernen.
    Wenn nein, füge iche den Eintrag per $D2[$Hash2] = File2 hinzu.

    Sind beide Scheliefen durch, habe ich in $D1 die Dateien, die in Verz.2 nicht existieren oder unterschidlich sind und umgekehrt.

    Montag, 30. September 2019 07:04

Alle Antworten

  • Moin, 

    das Problem ist, das du versuchst, den String von Hash mit format-wide auszuwählen. Aber format-wide formatiert die Ausgabe und ist keine Selektierung. Auch wenn das Ergebnis erstmal gleich aussieht.

    Führ mal folgenden Code aus (natürlich auf Dateien, die du hast) und schau dir dann an, was in $md5ref drin steht.

    $hashxlsx = Get-FileHash -Path "I:\Mappe1.xlsx" -Algorithm MD5 | format-wide -Property Hash
    $hashpdf = Get-FileHash -Path "I:\Unbenannt.pdf" -Algorithm MD5 | format-wide -Property Hash
    $md5ref = $hashxlsx + "_" + $hashpdf

    Und dann führ diesen Code aus und schau dir an, was in md5ref steht:

    $hashxlsx = Get-FileHash -Path "I:\Mappe1.xlsx" -Algorithm MD5
    $hashpdf = Get-FileHash -Path "I:\Unbenannt.pdf" -Algorithm MD5
    $md5ref = $hashxlsx.Hash + "_" + $hashpdf.Hash

    Gruß




    Montag, 30. September 2019 05:56
  • Hallo

    Sorry, hatte ich vergessen zu erwähnen, ich habe es natürlich auch ohne format-wide versucht...

    Aber ich denke ich weiß dann nicht wie ich den Wert des Hashes selektieren kann und ihn in eine String Variable pipen kann... (Vermutlich ist genau da meine wissenslücke)

    Montag, 30. September 2019 06:08
  • Wenn du format-wide weg lässt, würdest du versuchen, zwei Objekte zu addieren. 

    Mein zweites Codebeispiel zeigt z.B. einen Weg, wie du eine Property eines Objekts selektieren kannst.

    Gruß


    Montag, 30. September 2019 06:14
  • ahh...danke, jetzt  hab ich es erst gesehen... also selektieren kann man mit .(überschrift) 

    Mit der ISE wurde mir das nicht so angezeigt...aber gut, hilft mir für weiteres erlernen... 

    Danke

    Montag, 30. September 2019 06:38
  • Danach fehlt dir noch der Vergleich.
    Hierzu kann man HashTables verwenden:https://www.windowspro.de/script/hash-table-powershell-erzeugen-elemente-hinzufuegen-loeschen-sortieren

    $D1 = @{}  // Tabelle 1
    $D2 = @{}  // Tabelle 2

    Per $D1[$Hash1] = $File fülle ich das 1. Array.
    in der 2. Schleife für das 2. Verzeichnis prüfe ich per $D1.ContainsKey($Hash2) ob die Datei bekannt und Identisch ist.
    Wenn ja, kann ich den Eintrag per $D1.Remove($Hash2) den Eintrag entfernen.
    Wenn nein, füge iche den Eintrag per $D2[$Hash2] = File2 hinzu.

    Sind beide Scheliefen durch, habe ich in $D1 die Dateien, die in Verz.2 nicht existieren oder unterschidlich sind und umgekehrt.

    Montag, 30. September 2019 07:04