Сравните хэш файла в PowerShell

Я новичок в Powershell, но пытаюсь написать простую функцию для сравнения двух файлов с использованием их хэшей. Я получаю неожиданные результаты, используя следующее:

$hash1 = Get-FileHash $source | Select-Object Hash
Write-Host("    hash1 : " + $hash1)

возвращает: hash1: @{Hash=93725215281E09E21317EA88E03B246AE13890ED96BB0B842A05A5E4969A4BFA}

$hash2 = Get-FileHash $destination | Select-Object Hash
Write-Host("    hash2 : " + $hash2)

возвращает: hash2: @{Hash=93725215281E09E21317EA88E03B246AE13890ED96BB0B842A05A5E4969A4BFA}

$hashdiff = ($hash1 -eq $hash2)
Write-Host("   hashdiff : " + $hashdiff)

возвращает: hashdiff: False

Я уверен, что это очевидная ошибка, но может ли кто-нибудь избавить меня от страданий и помочь мне понять, почему оператор равенства работает не так, как ожидалось?

Спасибо заранее

1 ответ

Решение

Линии Get-FileHash $source | Select-Object Hash (то же самое для $destination) вернуть PSObjects, содержащие свойство Hash.

Это то свойство, которое вы хотите сравнить, так что либо

$hashdiff = ($hash1.Hash -eq $hash2.Hash)

Или получите значения хеш-строки и сравните их:

$hash1 = Get-FileHash $source | Select-Object -ExpandProperty Hash
Write-Host("    hash1 : " + $hash1)

$hash1.gettype().fullname
$hash1

$hash2 = Get-FileHash $destination | Select-Object -ExpandProperty Hash
Write-Host("    hash2 : " + $hash2)

$hashdiff = ($hash1 -eq $hash2)
Write-Host("    hashdiff : " + $hashdiff)

Результат:

hash1 : 6A9F599704B0895581ED47805F80137120D14E824DA19A78C2808576A8A0405B
hash2 : 6A9F599704B0895581ED47805F80137120D14E824DA19A78C2808576A8A0405B
hashdiff : True
Другие вопросы по тегам