Laatst bijgewerkt:

Hashes in PowerShell

Waarom de hashes in het ondertekende verslag horen, staat op Integriteit.

Eén bestand

Get-FileHash -Algorithm SHA256 -LiteralPath .\bestand.pst

Alle bestanden in een map

Weggeschreven naar CHECKSUMS_SHA256.txt één niveau hoger:

Get-ChildItem -Recurse -File |
    Get-FileHash -Algorithm SHA256 |
    ForEach-Object { '{0} *{1}' -f $_.Hash, (Resolve-Path -LiteralPath $_.Path -Relative) } |
    Set-Content -Encoding utf8 ..\CHECKSUMS_SHA256.txt

Nakijken

Uit te voeren in de datamap:

$fouten = 0
Get-Content ..\CHECKSUMS_SHA256.txt -Encoding utf8 | Where-Object { $_ } | ForEach-Object {
    $verwacht, $pad = $_ -split ' \*', 2
    if (-not (Test-Path -LiteralPath $pad)) { $fouten++; "ONTBREEKT: $pad"; return }
    if ((Get-FileHash -Algorithm SHA256 -LiteralPath $pad).Hash -ne $verwacht) { $fouten++; "AFWIJKING: $pad" }
}
if ($fouten -eq 0) { 'Alle bestanden komen overeen.' } else { "$fouten afwijking(en) gevonden." }

Dit meldt gewijzigde en ontbrekende bestanden, maar geen bestand dat erbij gekomen is.

Valkuilen

Zet -Encoding utf8 bij Set-Content. Windows PowerShell 5.1 schrijft anders in de codepagina van het systeem. Een bestandsnaam met een accent of een Cyrillische letter komt dan verminkt in de lijst. In een map met e-mailbijlagen gebeurt dat snel.

Gebruik -LiteralPath, niet -Path. Met -Path leest PowerShell rechte haken in een bestandsnaam als jokertekens, vindt het bestand niet en meldt niets. Bestandsnamen uit mailboxen bevatten vaak rechte haken.

Schrijf de lijst niet in de map die je aan het hashen bent. Anders neemt hij zichzelf half geschreven op. Schrijf een niveau hoger en verplaats hem daarna.