Во время синхронизации содержимого папок возникла необходимость проверки изменённых файлов, чтобы случайно не заменить новую версию файла старой. Решено было обратиться к вычислению и сравнению контрольных сумм файлов с помощью командлета Get-FileHash. В качестве примера я взял алгоритм MD5.
Получилась вот такая функция:
function СompareFileHash ($file1, $file2)
{
$TestFile1 = Test-Path $file1 -PathType Leaf
$TestFile2 = Test-Path $file2 -PathType Leaf
if ($TestFile1 -and $TestFile2)
{
try {
$hash1 = (Get-FileHash $file1 -Algorithm "MD5").Hash
$hash2 = (Get-FileHash $file2 -Algorithm "MD5").Hash
if ($hash1 -eq $hash2) { return $true }
else { return $false }
}
catch { return $false }
}
else { $fileserr = "Ошибка доступа к файлам"; return $fileserr }
}
Функция проверяет наличие файлов, получает hash и сравнивает. Если контрольные суммы одинаковые — файлы идентичны. Если конкретный файл или все файлы не найдены — будет выведена ошибка из переменной $fileserr.
Вызвать функцию в коде скрипта можно так:
СompareFileHash -file1 "\\path\to\file1" -file2 "\\path\to\file2"
А вот так можно вызвать функцию в операторе сравнения:
if (СompareFileHash -file1 "\\path\to\file1" -file2 "\\path\to\file2" -eq True)
{ Write-Host "Файлы совпадают. Всё хорошо." -ForegroundColor Green }
else { Write-Host "Файлы разные." -ForegroundColor Red }
Обращаю Ваше внимание, что скорость работы командлета Get-FileHash зависит от размера файла. Чем больше файл — тем дольше будет вычисляться контрольная сумма.