【发布时间】:2019-10-24 12:07:41
【问题描述】:
以下两个使用 Get-FileHash cmdlet 的命令似乎给出了相同的结果(目录及其子目录中所有文件的 md5 哈希)。我想知道除了字符数之外,文件路径列表中的管道和使用圆括号到 Get-FileHash cmdlet 之间是否有任何区别?
Get-FileHash -Algorithm MD5 -Path (Get-ChildItem "*.*" -Recurse)
Get-ChildItem "*.*" -Recurse | Get-FileHash -Algorithm MD5
另外,我尝试用 Measure-Command 对命令计时十几次(基于这个问题 Timing a command's execution in PowerShell;我不知道 PowerShell 中有一种更具统计意义的方法)——在同一个小目录上在我的系统中,圆括号版本通常需要 8 到 9 毫秒,而管道版本需要 9 到 10 毫秒。
Measure-Command { Get-FileHash -Algorithm MD5 -Path (Get-ChildItem "*.*" -Recurse) }
Measure-Command { Get-ChildItem "*.*" -Recurse | Get-FileHash -Algorithm MD5 }
【问题讨论】:
-
第一个版本读取高优先级 perens 部分中的文件并将其放入
-Path参数值。第二个读取文件信息并将其传送到接受byName或byValue的cmdlet 到-Path参数中。 ///// 使用大量 enuf 文件,第一个会更快,因为它避免了管道 [slow-ish] 和为推断参数分配值所需的解析。 -
在我的脑海中,Piping 会将每个文件对象传递给
Get-FileHash函数,因为括号中的命令版本将运行对象数组。我现在用更大的样本量来证实这一点。
标签: powershell