如何逐个对比两台服务器中Jar文件的哈希值?
Jar文件哈希逐个对比解决方案
原代码的问题在于直接对比两个哈希数组,PowerShell中数组的-eq操作要求元素顺序和值完全一致才会返回True,哪怕文件哈希全部正确但顺序不同,也会返回"Different",而且无法验证每个对应文件的哈希匹配情况。
以下是使用循环逐个对比的实现代码:
# 获取两台服务器的Jar文件哈希对象,按文件名排序以确保对应关系 $server1Hashes = Get-FileHash '\\server1\c$\some_folder\*.jar' | Sort-Object -Property Path $server2Hashes = Get-FileHash '\\server2\c$\some_folder\*.jar' | Sort-Object -Property Path # 先检查文件数量是否一致 if ($server1Hashes.Count -ne $server2Hashes.Count) { Write-Host "文件数量不匹配:服务器1有$($server1Hashes.Count)个Jar,服务器2有$($server2Hashes.Count)个Jar" exit } $allMatch = $true # 逐个对比每个文件的哈希 for ($i = 0; $i -lt $server1Hashes.Count; $i++) { # 提取文件名(去掉路径) $fileName1 = Split-Path -Path $server1Hashes[$i].Path -Leaf $fileName2 = Split-Path -Path $server2Hashes[$i].Path -Leaf # 先对比文件名是否一致 if ($fileName1 -ne $fileName2) { Write-Host "文件名不匹配:服务器1的[$fileName1] vs 服务器2的[$fileName2]" $allMatch = $false continue } # 对比哈希值 if ($server1Hashes[$i].Hash -eq $server2Hashes[$i].Hash) { Write-Host "[$fileName1] 哈希匹配" } else { Write-Host "[$fileName1] 哈希不匹配" $allMatch = $false } } # 输出最终结果 if ($allMatch) { Write-Host "`n所有Jar文件哈希均匹配" } else { Write-Host "`n存在不匹配的Jar文件" }
代码说明
- 先通过
Sort-Object按文件路径排序,确保两台服务器的文件按相同顺序排列,避免因文件顺序不同导致的错误对比 - 先检查文件数量,快速发现缺失或多余的文件
- 循环中先验证文件名一致性,再对比哈希值,清晰输出每个文件的对比结果
- 最后根据所有文件的对比情况给出总结性提示
内容的提问来源于stack exchange,提问作者Delyan
相关产品推荐
相关产品推荐

