ZetCode

PowerShell Get-FileHash

最后修改:2025 年 2 月 15 日

在本文中,我们将介绍 PowerShell 中的 Get-FileHash cmdlet。此 cmdlet 计算文件的加密哈希值。

哈希基础知识

哈希是由哈希算法生成的固定大小的字符串。它唯一地表示文件内容。常见的哈希算法包括 SHA1、SHA256 和 MD5。哈希用于验证文件完整性并检测更改。

Get-FileHash 基本用法

使用 Get-FileHash 的最简单方法是仅提供文件路径。它默认为 SHA256 算法。输出包括哈希值和所使用的算法。这对于快速文件验证很有用。

hash1.ps1
Get-FileHash -Path "C:\Windows\explorer.exe"

此命令计算 explorer.exe 的 SHA256 哈希。输出显示哈希值、算法和文件路径。

指定哈希算法

您可以使用 -Algorithm 参数指定不同的哈希算法。支持的算法包括 SHA1、SHA256、SHA384、SHA512 和 MD5。每种算法会产生不同的哈希长度。

hash2.ps1
Get-FileHash -Path "C:\Windows\explorer.exe" -Algorithm SHA512

此命令计算 explorer.exe 的 SHA512 哈希。SHA512 比 SHA256 产生更长的哈希,以增强安全性。

PS C:\> .\hash2.ps1

Algorithm       Hash                                                                   Path
---------       ----                                                                   ----
SHA512          E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855...   C:\Windows\explorer.exe

哈希多个文件

您可以通过使用通配符或管道文件对象来哈希多个文件。这对于批量处理很有用。输出分别显示每个文件的哈希。您可以一次验证多个文件。

hash3.ps1
Get-ChildItem -Path "C:\Windows\*.exe" | Get-FileHash -Algorithm MD5

此命令计算 C:\Windows 中所有 .exe 文件的 MD5 哈希。输出中会显示每个文件的哈希。

比较文件哈希

您可以比较文件哈希以验证完整性。存储原始哈希并与新计算的哈希进行比较。匹配的哈希表示文件未更改。不同的哈希意味着文件已被修改。

hash4.ps1
$originalHash = "A94A8FE5CCB19BA61C4C0873D391E987982FBBD3"
$currentHash = (Get-FileHash -Path "file.txt" -Algorithm SHA1).Hash
$originalHash -eq $currentHash

此脚本将存储的 SHA1 哈希与当前文件哈希进行比较。如果哈希匹配,则返回 True,否则返回 False。

用于哈希的流输入

您可以哈希流中的数据而不是文件。将 -InputStream 参数与流对象一起使用。这对于哈希动态数据很有用。该过程类似于文件哈希。

hash5.ps1
$data = [System.Text.Encoding]::UTF8.GetBytes("Hello World")
$stream = [System.IO.MemoryStream]::new($data)
Get-FileHash -InputStream $stream -Algorithm SHA256

此命令将字符串 "Hello World" 作为流进行哈希。输出显示输入数据的 SHA256 哈希。

带进度显示的哈希

对于大文件,您可以在哈希过程中显示进度。使用 -Verbose 参数显示进度信息。这有助于监视长时间运行的操作。哈希计算将在后台继续。

hash6.ps1
Get-FileHash -Path "largefile.iso" -Algorithm SHA256 -Verbose

此命令在显示进度的同时对大文件进行哈希。详细输出指示正在进行的操作状态。

导出哈希结果

您可以将哈希结果导出到文件以进行文档记录。使用标准输出重定向或 Export-Csv cmdlet。这会创建文件哈希的永久记录。这对于安全审计很有用。

hash7.ps1
Get-FileHash -Path "important.dll" | Export-Csv -Path "hashes.csv" -NoTypeInformation

此命令将 important.dll 的哈希保存到 CSV 文件。输出文件可用于将来的验证。

来源

PowerShell 文档

在本文中,我们介绍了 PowerShell 中的 Get-FileHash cmdlet。

作者

我叫 Jan Bodnar,是一名充满热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 PowerShell 教程