在powershell中获取大文件的md5校验和
我使用了上面的查询,但得到了下面的错误 调用带有“1”参数的“ReadAllBytes”时出现异常:“文件是 太长。此操作当前仅限于支持较少的文件 大小超过2 GB。” 在下面试用在powershell中获取大文件的md5校验和,powershell,Powershell,我使用了上面的查询,但得到了下面的错误 调用带有“1”参数的“ReadAllBytes”时出现异常:“文件是 太长。此操作当前仅限于支持较少的文件 大小超过2 GB。” 在下面试用 Function calculateMD5($filename) { $md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider $hash = [System.BitConverter]::ToString($m
Function calculateMD5($filename) {
$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$hash = [System.BitConverter]::ToString($md5.ComputeHash([System.IO.File]::ReadAllBytes($filename)))
$hash = $hash -replace '-', ''
return $hash.ToLower()}
但是,我PowerShell停止使用此正如其他人评论的那样,在PowerShell中,您应该使用cmdlet: 但是,如果您想使用.Net方法执行此操作,我建议您将函数更改为:
(Get-FileHash -Path $filename -Algorithm MD5).Hash.ToLower()
上述内容符合函数名称中的
动词-名词约定,并在内部使用流。正如其他人所评论的,在PowerShell中,您应该使用cmdlet:
但是,如果您想使用.Net方法执行此操作,我建议您将函数更改为:
(Get-FileHash -Path $filename -Algorithm MD5).Hash.ToLower()
上述操作符合函数名称中的动词-名词约定,并在内部使用流。您是否尝试了cmdlet?@Vivek Get FileHash not working确实是正确的PowerShell方法(区别在于PowerShell在流式处理整个文件时几乎不使用任何内存)。请详细说明“不工作”…如果有帮助的话,我只是在一个3GB的文件上尝试了获取FileHash
,我用FS util创建了这个文件,它工作了,可以理解,速度很慢,但它工作了。我要指出,将数据读入内存通常会导致内存消耗为读取文件大小的4倍。通常我认为内存问题被夸大了,但在这种情况下,你可能需要考虑它。你尝试过CMDLET吗?@维韦克FielHeHASE不工作确实是正确的PuxBeSE方法(不同的是,POWER S壳在整个文件流中几乎不使用任何内存)。请详细说明“不工作”…如果有帮助的话,我只是在一个3GB的文件上尝试了获取FileHash
,我用FS util创建了这个文件,它工作了,可以理解,速度很慢,但它工作了。我要指出,将数据读入内存通常会导致内存消耗为读取文件大小的4倍。通常我认为记忆的担忧被夸大了,但在这种情况下,你可能需要考虑它。非常感谢你。它在服务器上运行。非常感谢。它在服务器上工作。
function Get-FileMD5 {
param(
[Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
[ValidateScript({Test-Path -Path $_ -PathType Leaf})]
[Alias('FileName','FilePath')]
[string]$Path
)
$hasher = [System.Security.Cryptography.MD5]::Create()
$stream = [System.IO.FileStream]::new($Path, [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read)
$result = [System.BitConverter]::ToString($hasher.ComputeHash($stream))
$stream.Dispose()
$hasher.Dispose()
$result.Replace("-","").ToLower()
}