我正在尝试使用 powershell 为整个目录生成 MD5 校验和。
在 Linux 上,有一个非常有效的 1-liner,如下所示:
$ tar -cf - 某个目录 | md5和
我了解到“tar”现在是 Windows 10 的一部分,并且可以在 PowerShell 中对其进行寻址。
所以我尝试了这个:
tar -cf - C:\data | Get-FileHash -MD5 算法
我从 PowerShell 得到的是这样的:
tar.exe:从成员名称中删除前导驱动器号
Get-FileHash :输入对象无法绑定到命令的任何参数,因为命令不接受管道输入或者输入及其属性与接受管道输入的任何参数不匹配
我的 Shell 设置为德语,因此我通过翻译机运行德语错误文本(https://www.translator.eu/# https://www.translator.eu/#).
我想知道为什么我收到这个特定的错误消息,因为 Get-FileHash 能够处理管道输入,例如:
LS | Get-FileHash -MD5 算法
这个命令就像一个魅力,但它为我提供了每个文件的校验和。
我想要的是完整给定目录的 1 个校验和。
所以,我可能搞砸了一些事情...... - 有什么想法吗?
编辑:这是一种即使所有文件都移动/复制到另一个位置也是一致的替代方法。这个使用所有文件的哈希来创建“主哈希”。由于显而易见的原因,它需要更长的时间运行,但会更可靠。
$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:\script\test\TestFolders -Recurse | Out-String
Get-FileHash -InputStream ([IO.MemoryStream]::new([char[]]$HashString))
如果需要的话可以压缩成一行,尽管它开始变得越来越难以阅读:
Get-FileHash -InputStream ([IO.MemoryStream]::new([char[]]"$(Get-ChildItem C:\script\test\TestFolders -Recurse|Out-String)"))
基本上它使用来自的信息创建一个内存流Get-ChildItem
并将其传递给Get-FileHash
.
不确定这是否是一个很好的方法,但它是one way :-)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)