我正在尝试创建一个脚本,可以获取我使用函数ChildItem获得的文件和目录的哈希MD5。我的剧本目前如下。为什么哈希的部分不起作用?
$UserInput = Read-Host
Get-ChildItem -Path $UserInput -Recurse
function md5hash($UserInput)
{
$fullPath = Resolve-Path $UserInput
$md5 = new-object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$file = [System.IO.File]::Open($fullPath,[System.IO.Filemode]::Open, [System.IO.FileAccess]::Read)
[System.BitConverter]::ToString($md5.ComputeHash($file))
$file.Dispose()
}
作为单线:
Get-ChildItem -Path C:\Temp -Recurse -File | Get-Filehash -Algorithm MD5
$someFilePath = "C:\foo.txt"
$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$hash = [System.BitConverter]::ToString($md5.ComputeHash([System.IO.File]::ReadAllBytes($someFilePath)))
编辑:您的代码应该可以正常工作,甚至比我建议的更好,因为我的示例仅限于<2GB大小的文件。由于您的使用Stream,因此效率更高(不会首先将其全部加载到内存中),并且不会有大小限制。
您的文件路径必须是文件,因为您正在进行特定于文件的I / O调用...