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

Lig*_*ack 4 directory powershell checksum md5

我正在尝试使用 powershell 为整个目录生成 MD5 校验和。\n在 Linux 上,有一个非常有效的 1-liner,如下所示:

\n

$ tar -cf - 某个目录 | md5和

\n

我了解到“tar”现在是 Windows10 的一部分,并且可以在 PowerShell 中对其进行寻址。\n所以我尝试了以下操作:

\n

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

\n

我从 PowerShell 得到的是这样的:

\n
\n

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

\n
\n

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

\n

我想知道为什么我收到这个特定的错误消息,因为 Get-FileHash 能够处理管道输入,例如:

\n

LS | Get-FileHash -MD5 算法

\n

这个命令就像一个魅力,但它为我提供了每个文件的校验和。\n我想要的是完整给定目录的 1 个校验和。

\n

所以,我可能搞砸了一些东西\xe2\x80\xa6 - 有什么想法吗?

\n

PMe*_*tal 9

编辑:这是一种即使所有文件都移动/复制到另一个位置也是一致的替代方法。这个使用所有文件的哈希来创建“主哈希”。由于显而易见的原因,它需要更长的时间运行,但会更可靠。

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

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

$HashString = Get-ChildItem C:\script\test\TestFolders -Recurse | Out-String
Get-FileHash -InputStream ([IO.MemoryStream]::new([char[]]$HashString))
Run Code Online (Sandbox Code Playgroud)

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

Get-FileHash -InputStream ([IO.MemoryStream]::new([char[]]"$(Get-ChildItem C:\script\test\TestFolders -Recurse|Out-String)"))
Run Code Online (Sandbox Code Playgroud)

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

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