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.