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.
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.