【问题标题】:Powershell V2.0 SHA1 CalculationPowershell V2.0 SHA1 计算
【发布时间】:2014-12-04 12:00:33
【问题描述】:

I posted a question on Monday about how I can calculate SHA1 hash within powershell.
结果代码如下:

$file = 'C:\Zip\File.zip'

$sha1 = New-Object System.Security.Cryptography.SHA1CryptoServiceProvider 
[System.BitConverter]::ToString( $sha1.ComputeHash([System.IO.File]::ReadAllBytes($file)))

这段代码运行良好,可以满足我的需要,但目前我必须指定要为其计算 SHA1 哈希的文件。有什么方法可以让我计算该“zip”文件夹中每个文件的哈希值。

在过去的两天里,我一直在尝试通过使用循环等来做到这一点,但我没有搬到任何地方。我的 PowerShell 技能令人震惊,这于事无补。

非常感谢任何帮助。

【问题讨论】:

  • 如果您已经尝试过,请出示您的代码,然后有人可能会告诉您您哪里出错了。在不显示代码的情况下说“为什么这不起作用”是没有意义的。

标签: loops powershell hash powershell-2.0 sha1


【解决方案1】:

所以基本上,你只是想

  1. 获取C:\Zip\
  2. 中所有文件的列表
  3. 将代码的 sn-p 应用到它们中的每一个。

您想研究使用 ForEach 循环(也可以用缩写形式表示,用于管道,如下所示:$var | % {<#do this for each #>})。
您可以在整个 Internet 上阅读有关 ForEach 循环的更多信息 - 我在研究 PowerShell 主题方面非常幸运的两个站点是 TechNetHey, Scripting Guy! Blog。我建议检查一下,然后阅读。

这应该是一个好的开始:

$zips = Get-ChildItem 'C:\Zip\' -Filter *.zip
$sha1 = New-Object System.Security.Cryptography.SHA1CryptoServiceProvider 

foreach ($file in $zips) {
    $return = "" | Select Name, Hash

    $return.name = $file.Name
    $return.hash = [System.BitConverter]::ToString($sha1.ComputeHash([System.IO.File]::ReadAllBytes($file.FullName)))

    Write-Output $return
}

【讨论】:

  • 好的,谢谢,我会读一些 foreach 循环,看起来我需要它们做很多事情。干杯!
  • 我已经运行了这个,它在每个 zip 文件中都出现了一个错误,指出:italic_Cannot find an overload for "ComputeHash" and the argument count: "1"。在 C:\Users\X\X\test.ps1:8 char:66 + $return.hash = [System.BitConverter]::ToString($sha1.ComputeHash 你知道这可能是什么吗?
  • 一定是有错字,因为我要跨越两个系统。重新输入,现在可以正常工作了:)再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
  • 2011-08-21
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多