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.