我正试图用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
。
不确定这是否是一种很好的方法,但这是一种方法:-(