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

PowerShell相同文件哈希对比函数返回false问题排查求助

PowerShell哈希对比函数失效的问题原因及修复方案

问题原因

  1. 错误使用格式化命令:你通过Format-List Hash处理Get-FileHash的输出,该命令返回的是格式化展示用的对象(类型为Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData),而非纯哈希字符串。即使两个文件的哈希值逻辑上相同,这两个格式化对象的内部元数据并不一致,导致Compare-Object或-eq对比时判定为不匹配。
  2. 拼写错误:代码中@(Compare-Object $HASH_1 $HASH_2).Lenght的Lenght是拼写错误,正确应为Length,不过这不是导致匹配失败的核心原因。

修复方法

核心是直接提取Get-FileHash返回对象的Hash属性值(纯字符串),而非使用格式化命令处理输出。以下是修复后的函数:

Function Compare-Hash {
    param (
        $FILE_1,
        $FILE_2
    )

    # 直接获取哈希字符串,而非格式化对象
    $HASH_1 = (Get-FileHash $FILE_1 -Algorithm SHA256).Hash
    $HASH_2 = (Get-FileHash $FILE_2 -Algorithm SHA256).Hash
    
    # 直接对比字符串相等性
    $HASH_MATCHED = $HASH_1 -eq $HASH_2

    If ($HASH_MATCHED) {
        Write-Host -ForegroundColor Green Hash matched!
    }
    else {
        Write-Host -ForegroundColor Red Hash not matched!
        # 可选:输出具体哈希值便于排查差异
        Write-Host "File 1 Hash: $HASH_1"
        Write-Host "File 2 Hash: $HASH_2"
    }
}

额外说明

  • 若仍想使用Compare-Object,需基于哈希字符串对比,同时修正拼写错误:
    $HASH_MATCHED = @(Compare-Object $HASH_1 $HASH_2).Length -eq 0
    
  • 直接对比字符串(-eq)是更高效的方式,适合这种简单的相等性判断。

内容的提问来源于stack exchange,提问作者caionam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:05:20