Haszujemy pliki w PowerShell

https://xpil.eu/4lj

Jakiś czas temu opowiadałem o funkcji skrótu. Dziś króciutko pokażę jak w PowerShell-u zaimplementować haszowanie plików.

Idea jest taka, żeby dla każdego pliku danego typu w pewnym folderze utworzyć - w tym samym folderze - plik z haszem, o identycznej nazwie, tylko z dołączonym rozszerzeniem ".hash"

Po co takie cyrki, pytacie?

A no na przykład po to, żeby ktoś, kto kopiuje taki plik od nas, mógł go sobie zweryfikować po swojej stronie (czyli porównać hasz, który sam sobie wygeneruje, z haszem, który dostanie od nas).

Albo po to, żeby wyłapać pliki o różnych nazwach, ale identycznych zawartościach (będą miały takie same hasze).

Kod jest prościutki, ale może komuś się akurat przyda:

$strPath = "C:\jakis\fajny\folder\"
$strMask = "*.xml"
$blnRecurse = 1

if($blnRecurse -eq 0) {
	$colAllFiles = Get-ChildItem -Path $strPath -Include $strMask
} else {
	$colAllFiles = Get-ChildItem -Path $strPath -Recurse -Include $strMask
}

$colAllFiles | 
ForEach-Object { 
	$strHashFileName = $($_.FullName + ".hash")
	$blnDoHashFile = 1
	if (Test-Path $strHashFileName) {
		$dtFileDate = $_.lastwritetime
		$dtHashDate = $(Get-Item $strHashFileName).lastwritetime
		if($dtFileDate -gt $dtHashDate) {
			Remove-Item $strHashFileName
		} else {
			$blnDoHashFile = 0
		}
	}
	if($blnDoHashFile -eq 1) {
		$strHash = (Get-FileHash($_.FullName)).Hash
		$strHash > $strHashFileName
	}
}

Ponieważ jestem leniwy, nie będę omawiał całego kodu. Podpowiem tylko, że samo haszowanie odbywa się pod koniec skryptu (Get-FileHash), a także, że skrypt nie marnuje czasu na haszowanie pliku już pohaszowanego, o ile tylko plik z haszem został utworzony później, niż plik haszowany (w przeciwnym przypadku skrypt skasuje stary hasz i utworzy nowy). Można również ustawić parametr $blnRecurse na jeden lub zero (włączenie - wyłącznie haszowania w podkatalogach).

Pytania, wnioski bądź petycje zwyczajowo już proszę kierować na Berdyczów do sekcji komentarzy.

https://xpil.eu/4lj

Leave a Comment

Komentarze mile widziane.

Jeżeli chcesz do komentarza wstawić kod, użyj składni:
[code]
tutaj wstaw swój kod
[/code]

Jeżeli zrobisz literówkę lub zmienisz zdanie, możesz edytować komentarz po jego zatwierdzeniu.