使用powershell对整个目录进行MD5校验和哈希



我正试图用powershell为整个目录生成MD5校验和。在Linux上,有一个运行良好的1行程序,如以下所示:

$tar-cf-somedir|md5sum

我了解到";焦油";现在是Windows10的一部分,可以在PowerShell中解决。所以我尝试了这个:

tar-cf-C:\data|Get-FileHash-算法MD5

我从PowerShell得到的是:


tar.exe:从成员名称中删除前导驱动器号
Get-FileHash:输入对象不能绑定到命令的任何参数,因为命令不接受管道输入,或者输入及其属性与接受管道输入的任何参数都不匹配


我的外壳设置为德语,所以我通过翻译机运行德语错误文本(https://www.translator.eu/#)。

我想知道为什么我会收到这个特定的错误消息,因为get-FileHash IS能够处理流水线输入,例如:

ls | Get-FileHash-算法MD5

这个命令就像一个符咒,但它给了我每个文件的校验和。我想要的是一个完整给定目录的1个校验和。

所以,我可能搞砸了什么…-有什么想法吗?

EDIT:这里有一个备用方法,即使所有文件都被移动/复制到另一个位置,它也是一致的。这一个使用所有文件的散列来创建";主散列";。由于显而易见的原因,它需要更长的时间来运行,但会更可靠。

$HashString = (Get-ChildItem C:Temp -Recurse | Get-FileHash -Algorithm MD5).Hash | Out-String
Get-FileHash -InputStream ([IO.MemoryStream]::new([char[]]$HashString))

原始,更快但不太稳健,方法:

$HashString = Get-ChildItem C:scripttestTestFolders -Recurse | Out-String
Get-FileHash -InputStream ([IO.MemoryStream]::new([char[]]$HashString))

如果需要的话,可以浓缩成一行,尽管它开始变得更难阅读:

Get-FileHash -InputStream ([IO.MemoryStream]::new([char[]]"$(Get-ChildItem C:scripttestTestFolders -Recurse|Out-String)"))

基本上,它使用来自Get-ChildItem的信息创建一个内存流,并将其传递给Get-FileHash

不确定这是否是一种很好的方法,但这是一种方法:-(

最新更新