1

我对 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:假

我确定这是一个明显的错误,但是有人可以让我摆脱痛苦并帮助我理解为什么相等运算符没有按预期工作吗?

提前谢谢了

4

1 回答 1

1

这些行Get-FileHash $source | Select-Object Hash(对于 相同$destination)返回包含属性 Hash的 PSObject 。

这是您要比较的属性,所以要么

$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
于 2020-02-13T18:56:34.957 回答