【问题标题】:Powershell Unable to compare MD5 values from file with MD5 values generatedPowershell 无法将文件中的 MD5 值与生成的 MD5 值进行比较
【发布时间】:2015-03-24 12:15:38
【问题描述】:

我使用 Powershell 的 Get-FileHash 函数从我的项目目录中生成了 MD5 校验和值列表,然后我将这些值导出到 .csv 文件。

$path = "C:\Users\Krishnaa\Documents\Visual Studio 2012\Projects\NamePrint\NamePrint\obj\Debug"

$hash = Get-FileHash -Path $path\* -Algorithm MD5

$export = $hash | Export-csv $path\hashfile.csv

这就是我调用$hash时输出的样子:http://i.stack.imgur.com/Owi0Q.png

然后我将 .csv 文件导入回 Powershell 控制台。

$import = Import-csv $path\hashfile.csv | Format-Table

当我调用$import 时,它会输出:http://i.stack.imgur.com/cqvsO.png

当我自己创建一个简单的函数来比较这两个内容时,我遇到了一个问题,它说内容不匹配。我确实明白 .csv 中的每一行都被 Powershell 视为一个对象。如何在 Powershell 中比较对象与对象?

【问题讨论】:

  • 这里有什么问题?如果您的代码不能按照您想要的方式运行,您应该显示该代码。
  • @EtanReisner 我使用 Get-FileHash 从目录中的文件列表生成 MD5 值列表。它在 Powershell 中以表格格式显示它们。然后我将这些值导出到相同路径的 .csv 文件。当我使用 Import-CSV cmdlet 将 .csv 文件导入回 Powershell 控制台时,它会输出 MD5 表,尽管宽度不同。当我创建一个简单的 compareHash 函数时,它说值不匹配。
  • 问题是为什么你的函数说它们不匹配或者为什么列的宽度不同?如果问题与您的功能有关,您需要显示该功能。如果问题是关于显示的宽度,那么我不知道这是否是一个真正的问题,它可能只是对象配置在 Get-FileHash 对象指示的内容和返回的行对象指示的内容之间有所不同(您必须检查对象看看)。

标签: windows powershell compare md5 cmdlets


【解决方案1】:

上面代码的一个问题是你使用了Import-CSV。您不是将Import-CSV 返回的对象分配给$import,而是分配Format-Table 返回的格式化对象数组。如果您删除Format-Table,您应该能够比较$import.hash$hash.hash(尽管您可能需要循环并逐行比较)。

【讨论】:

  • 好吧,我最初使用它时没有使用 Format-Table cmdlet,当我输出 $import 时,它曾经以列表的形式出现。这不时发生。我必须退出并重新启动 Powershell 几次才能解决该问题。所以这就是我现在所做的,函数 compareHash { foreach ($import.Hash 中的$object) { foreach($hash.Hash 中的$object2) { if($object -eq $object2) { echo success } else { echo nope } } } } compareHash 这是我的输出:imgur.com/4JizXZ8
  • 要查看它,你绝对可以通过Format-Table 管道它,只是不要在作业期间使用它。从您的输出中,我很难判断它是否像应有的那样经常匹配。我在我的 PC 上使用文件尝试过它(并在你的函数中的倒数第二个 } 之前添加一个“---”来分解),它看起来至少对我来说是这样。
猜你喜欢
  • 2021-09-27
  • 1970-01-01
  • 2020-11-18
  • 2013-12-25
  • 1970-01-01
  • 2021-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多