Haszujemy pliki w PowerShell

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.

Autor: xpil

Po czterdziestce. Żonaty. Dzieciaty. Komputerowiec. Krwiodawca. Emigrant. Rusofil. Lemofil. Sarkastyczny. Uparty. Mól książkowy. Ateista. Apolityczny. Nie oglądam TV. Uwielbiam matematykę. Walę prosto z mostu. Gram na paru instrumentach. Lubię planszówki. Słucham bluesa, poezji śpiewanej i kapel a’capella. || Kliknij tutaj po więcej szczegółów ||

Dodaj komentarz

Bądź pierwszy!

Powiadom o
avatar
wpDiscuz