Dernière mise à jour:
Hachages dans PowerShell
Pourquoi les hachages ont leur place dans le rapport signé, je l’explique sur Intégrité.
Un fichier
Get-FileHash -Algorithm SHA256 -LiteralPath .\fichier.pst
Tous les fichiers d’un dossier
Écrits dans CHECKSUMS_SHA256.txt un niveau plus haut :
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
Vérifier
À exécuter dans le dossier de données :
$erreurs = 0
Get-Content ..\CHECKSUMS_SHA256.txt -Encoding utf8 | Where-Object { $_ } | ForEach-Object {
$attendu, $chemin = $_ -split ' \*', 2
if (-not (Test-Path -LiteralPath $chemin)) { $erreurs++; "MANQUANT : $chemin"; return }
if ((Get-FileHash -Algorithm SHA256 -LiteralPath $chemin).Hash -ne $attendu) { $erreurs++; "ÉCART : $chemin" }
}
if ($erreurs -eq 0) { 'Tous les fichiers correspondent.' } else { "$erreurs écart(s) constaté(s)." }
Ceci signale les fichiers modifiés et manquants, mais pas un fichier ajouté.
Pièges
Ajoutez -Encoding utf8 à Set-Content. Sinon, Windows PowerShell 5.1 écrit dans la page de codes du système. Un nom de fichier avec un accent ou une lettre cyrillique se retrouve alors déformé dans la liste. Dans un dossier de pièces jointes de courriels, cela arrive vite.
Utilisez -LiteralPath, pas -Path. Avec -Path, PowerShell lit les crochets d’un nom de fichier comme des jokers, ne trouve pas le fichier et ne signale rien. Les noms de fichiers issus de boîtes aux lettres contiennent souvent des crochets.
N’écrivez pas la liste dans le dossier que vous hachez. Sinon, elle s’inclut elle-même à moitié écrite. Écrivez un niveau plus haut et déplacez-la ensuite.