【发布时间】:2021-02-04 14:17:55
【问题描述】:
我正在尝试使用 powershell 为整个目录生成 MD5 校验和。 在 Linux 上,有一个 1-liner 非常好用,就像这个:
$ tar -cf - somedir | md5sum
我了解到“tar”现在是 Windows10 的一部分,并且可以在 PowerShell 中进行寻址。 所以我尝试了这个:
tar -cf - C:\data | Get-FileHash - 算法 MD5
我从 PowerShell 中得到的是:
tar.exe:从成员名称中删除前导驱动器号
Get-FileHash : 输入对象不能绑定到命令的任何参数,因为命令不接受管道输入或输入及其属性不匹配任何接受管道输入的参数
我的 Shell 设置为德语,因此我通过翻译机 (https://www.translator.eu/#) 运行了德语错误文本。
我想知道为什么我会收到这个特定的错误消息,因为 Get-FileHash 能够处理流水线输入,例如:
ls | Get-FileHash - 算法 MD5
这个命令就像一个魅力,但它给了我每个文件的校验和。 我想要的是完整给定目录的 1 个校验和。
所以,我可能搞砸了…… - 有什么想法吗?
【问题讨论】:
-
PowerShell 是基于对象的,运行诸如 tar.exe 之类的随机命令行程序不会只返回字符串对象,这些对象的管道通常不会给您想要的结果。 ls 管道的原因是它只是 PowerShell cmdlet Get-Childitem 的别名。用例是什么,检查文件夹中是否发生了变化?
-
Get-FileHash通过管道接受文件信息引用,而不是原始输入数据。tar -cf "$env:temp\data.tar" C:\data; Get-FileHash "$env:temp\data.tar" -Algorithm MD5; Remove-Item "$env:temp\data.tar" -Force应该这样做 -
@MathiasR.Jessen;你的建议就像一个魅力,而且非常快!非常感谢。如何将您的评论标记为出色的解决方案? :-)
标签: powershell directory md5 checksum