Get-FileHash -Path "D:\test\sha\xiaoban.exe"
Get-FileHash -Path "D:\test\sha\xiaoban.exe" -Algorithm MD5
Get-FileHash -Path "D:\test\sha\xiaoban.exe" -Algorithm SHA1
# 设置PowerShell控制台输出为UTF-8编码
$OutputEncoding = [System.Text.Encoding]::UTF8
# 获取脚本所在目录
$scriptDirectory = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
# 获取脚本自身的完整路径
$currentScriptPath = $MyInvocation.MyCommand.Definition
$batFilePath = Join-Path -Path $scriptDirectory -ChildPath "Run-Hashes.bat"
# 获取当前目录下所有文件,并排除脚本文件自身和批处理文件
$files = Get-ChildItem -Path $scriptDirectory -File | Where-Object {
$_.FullName -notin @($currentScriptPath, $batFilePath)
}
# 遍历所有文件并生成哈希值
foreach ($file in $files) {
try {
# 获取MD5, SHA1和SHA256哈希值
$md5 = Get-FileHash -Path $file.FullName -Algorithm MD5
$sha1 = Get-FileHash -Path $file.FullName -Algorithm SHA1
$sha256 = Get-FileHash -Path $file.FullName -Algorithm SHA256
# 构造输出内容
$output = @"
文件路径: $($file.FullName)
MD5: $($md5.Hash)
SHA1: $($sha1.Hash)
SHA256: $($sha256.Hash)
"@
# 将结果保存到文本文件,使用UTF-8编码
$outputFile = Join-Path -Path $scriptDirectory -ChildPath "$($file.BaseName)_Hashes.txt"
$output | Out-File -FilePath $outputFile -Encoding utf8
Write-Host "哈希值已保存到 $outputFile"
} catch {
Write-Host "处理文件 $($file.FullName) 时出错:" -ForegroundColor Red
Write-Host $_.Exception.Message -ForegroundColor Yellow
}
}
Write-Host "所有文件处理完成。" -ForegroundColor Green
@echo off powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0Generate-Hashes.ps1" exit
然后把2个文件放到同一个文件夹,把要计算的文件放到这个文件之后,双击Run-Hashes.bat就行。
我提供的脚本常见问题:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
-
允许本地脚本运行,远程脚本需要签名。
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Restricted
