Win10 - 如何将一个命令的输出作为另一个命令的参数通过管道传输以检查文件哈希?

Win10 - How to pipe the output from one command as an argument of another to check file hash?

假设我需要根据网站提供的哈希验证文件的 md5 哈希。

我在powershell中使用certutil -hashfile .\amazon-corretto-11.0.10.9.1-windows-x64.msi md5Get-FileHash -Path .\amazon-corretto-11.0.10.9.1-windows-x64.msi -Algorithm md5获取hash,然后从下载网站查看hash,逐个字母比较。有没有办法让命令行来做比较?

我试过certutil -hashfile .\amazon-corretto-11.0.10.9.1-windows-x64.msi md5 | echo == "website_hash",但没用。

欢迎使用命令行和 powershell 解决方案。

Continuing from my comment。试试这个:

Get-FileHash -Path 'D:\temp\book1.txt' -Algorithm MD5 | 
Format-Table -AutoSize
# Results
<#
Algorithm Hash                             Path             
--------- ----                             ----             
MD5       D572724F26BD600773F708AB264BE45B D:\temp\book1.txt
#>


$CompareObjectSplat = @{
    DifferenceObject = (Get-FileHash -Path 'D:\temp\book1.txt' -Algorithm MD5).Hash
    ReferenceObject  = (Get-FileHash -Path 'D:\temp\book1.txt' -Algorithm MD5).Hash
}
Compare-Object @compareObjectSplat -IncludeEqual

# Results
<#
InputObject                      SideIndicator
-----------                      -------------
D572724F26BD600773F708AB264BE45B == 
#>

# Get specifics for a module, cmdlet, or function
(Get-Command -Name Get-FileHash).Parameters
(Get-Command -Name Get-FileHash).Parameters.Keys
Get-help -Name Get-FileHash -Examples
Get-help -Name Get-FileHash -Full
Get-help -Name Get-FileHash -Online


(Get-Command -Name Compare-Object).Parameters
(Get-Command -Name Compare-Object).Parameters.Keys
Get-help -Name Compare-Object -Examples
Get-help -Name Compare-Object -Full
Get-help -Name Compare-Object -Online

根据 mklement0 对您和您的后续查询的有用回复对此进行标记。

# Command line - executable
(certutil -hashfile 'D:\temp\book1.txt' md5)
# Results
<#
MD5 hash of D:\temp\book1.txt:
d572724f26bd600773f708ab264be45b
CertUtil: -hashfile command completed successfully.
#>

(certutil -hashfile 'D:\temp\book1.txt' md5)[1] -eq (certutil -hashfile 'D:\temp\book1.txt' md5)[1]
# Results
<#
True
#>

您可以简单地在 (...) 中包含一个命令,grouping operator, if you want its output to act as an operand to an operator, such as -eq, the equality operator:

(certutil -hashfile .\amazon-corretto-11.0.10.9.1-windows-x64.msi md5)[1] -eq "website_hash"

注意:postanote 指出 certutil 输出 多行 行,感兴趣的散列在 second 行,[1] 索引访问 returns,基于 PowerShell 从 外部程序 返回的输出行作为 字符串数组.

根据@postanote 和@mklement0 的回答,这里有 2 个 powpershell 单行代码到非常文件哈希,都忽略大小写。

certutil:

(certutil -hashfile ./amazon-corretto-11.0.10.9.1-windows-x64.msi MD5)[1] -eq ("EE569A19016F233B2050CC11219EBBFD")

获取文件哈希:

Compare-Object -ReferenceObject (Get-FileHash -Path '.\amazon-corretto-11.0.10.9.1-windows-x64.msi' -Algorithm MD5).Hash -DifferenceObject ("EE569A19016F233B2050CC11219EBBFD") -IncludeEqual