You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何逐个对比两台服务器中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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 16:35:28