Get-FileHash 是什么
Get-FileHash 计算文件的哈希摘要(默认 SHA256,可换 MD5/SHA1/SHA384/SHA512),用于校验下载包是否完整、核对两台机器上的同名文件是否一致。它读全文件内容,得到的哈希与官方发布值逐字符比对即可判定;判断文件是否被改动,比看时间戳可靠得多。命令从 PowerShell 4.0 起内置,PowerShell 7 在 Linux/macOS 上同样可用。
基本信息
| 适用平台 | Windows PowerShell 4.0+、PowerShell 7(跨平台) |
|---|---|
| 语法 | Get-FileHash [-Path] <文件> [-Algorithm SHA256|MD5|SHA1|SHA384|SHA512> |
| 默认算法 | SHA256 |
| 输出对象 | Algorithm / Hash / Path 三个属性 |
| 批量方式 | 支持通配符与管道输入文件对象 |
| 附加参数 | -LiteralPath 处理含通配字符的真实文件名 |
典型使用场景
- 校验安装包、镜像下载是否完整,排除网络传输损坏
- 比对生产与备份两份文件的哈希,判断内容是否真的一致
- 批量盘点目录,找出与基线清单不符的文件
- 配合 Get-AuthenticodeSignature 做可疑二进制初筛
- 作为发布物清单的一部分存档,便于事后追责
- 同步校验:源端导出哈希清单,目标端逐一复算核对
常用示例
常用示例
Get-FileHash .\setup.exe -Algorithm SHA256 # 单个文件,默认 SHA256
Get-FileHash .\setup.exe | Select-Object -ExpandProperty Hash # 只要哈希串
(Get-FileHash .\a.bin).Hash -eq (Get-FileHash .\b.bin).Hash # 结果 True 表示内容一致
Get-ChildItem D:\Web -Recurse -File | Get-FileHash -Algorithm MD5 | Export-Csv D:\hash.csv -NoTypeInformation -Encoding UTF8 # 批量导出
$base = Import-Csv D:\hash.csv | Select-Object Path, Hash
Compare-Object $base.Hash (Get-FileHash -LiteralPath $base.Path).Hash # 与基线清单比对
Get-FileHash .\x.zip, .\y.zip | Format-Table Algorithm, Hash, Path -AutoSize输出逐列读法
| 列 | 含义 | 注意点 |
|---|---|---|
| Algorithm | 实际使用的算法 | SHA256 及以上才适合做完整性判定 |
| Hash | 十六进制摘要字符串 | 比对时不区分大小写 |
| Path | 被计算文件的完整路径 | 批量管道时用它回定位到具体文件 |
哈希只证明两份内容相同,不证明文件安全:被篡改的文件也能算出稳定哈希。要验来源,需与官方发布的哈希值比对(注意核对发布渠道本身是否可信),或改看 Authenticode 签名。
MD5/SHA1 出现的初衷是校验传输损坏,不是对抗人为篡改;对外发布与安全判定请用 SHA256 及以上。跨平台核验时注意有些工具默认输出大写、有些是小写,比对前统一大小写。校验大文件时也不要把结果直接贴进工单,长哈希容易被抄错,建议落成文件再核对。