проверить контрольные суммы MD5 из файла md5 в Windows
Надеюсь, простой вопрос: эквивалентна ли простая командная строка Windowsmd5sum --check [files.md5]
существовать? В качестве альтернативы я могу написать сценарий в виде командного файла.
Я могу нормально сгенерировать файл хэшей, но проверка в месте назначения по сравнению с файлом md5 оказывается сложной задачей. Бонусные баллы, если можно запустить в пакетном файле, а не в PowerShell (нужно попытаться создать что-то относительно простое, чтобы пользователь мог запускать его регулярно).
Большое спасибо!
1 ответ
Powershell — ваш друг. Вы можете запустить это с помощью оболочки CMD/BAT, чтобы просто запустить для них скрипт.
clear-host
$sourcemd5 = get-content C:\temp\cp053854.md5
cd C:\Temp
foreach ($datarow in $sourcemd5){
# try this to replace mutli spaces with single. uses regex
$datarow = $($datarow -replace '\s+', ' ')
$dlhash = $null
$currentFileHash = $null
$currentFileName = $null
#use the first (0) token found (hash value)
$currentFileHash = ($datarow.Split(" "))[0]
#use the second (1) token found (filename value)
$currentFileName = ($datarow.Split(" "))[1]
#$currentFileName check if has leading asterisk*.
if ($currentFileName -match "\*"){
#remove it
$currentFileName = $currentFileName.Trim("\*")
}
# Generate an MD5 of the filesystem file
$dlhash = get-filehash $currentFileName -Algorithm MD5
#set the generated hash value as string for comparison to the text file.
[string]$dlhashstr = $dlhash.Hash
write-output "checking file [$currentfileName]"
write-output "downloaded file hash [$dlhashstr]"
write-output "hash value should be [$currentFileHash]"
#perform a case insensitive comparison if MD5file uses caps or not.
if ($dlhashstr -eq $currentFileHash){
write-output "File hashes correctly match up [$currentFileName]"
}else{
Write-Warning "MD5 checksum mismatch [$currentFileName]"
}
}