В чем разница между трубопроводами и круглыми скобками для PowerShell Get-FileHash? - PullRequest
1 голос
/ 10 июня 2019

Следующие две команды, использующие командлет Get-FileHash, дают одинаковый результат (хэши md5 для всех файлов в каталоге и его подкаталогах). Мне было интересно, есть ли какая-либо разница между конвейированием в списке путей к файлам и использованием круглых скобок для командлета Get-FileHash, кроме количества символов?

Get-FileHash -Algorithm MD5 -Path (Get-ChildItem "*.*" -Recurse)

Get-ChildItem "*.*" -Recurse | Get-FileHash -Algorithm MD5

Кроме того, я пытался синхронизировать команды с помощью Measure-Command примерно дюжину раз (на основе этого вопроса Хронометраж выполнения команды в 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 }

1 Ответ

0 голосов
/ 10 июня 2019

Пробежал по большему размеру выборки, возьми это за то что будешь.Похоже, что быстрее присвоить GCI переменной, чем использовать ее в качестве параметра Get-FileHash.

Также, как указано в комментариях.Bracketed - это массив, в котором по конвейеру «толкают» каждый объект в функцию.Трубопровод, как правило, медленнее.

Пробежал эти числа примерно в 15 раз и сохранил последние результаты, потому что они были очень похожи.

(Get-ChildItem "*.*" -Recurse).Count
(Measure-Command { Get-FileHash -Algorithm MD5 -Path (Get-ChildItem "*.*" -Recurse) }).TotalSeconds
(Measure-Command { Get-ChildItem "*.*" -Recurse | Get-FileHash -Algorithm MD5 }).TotalSeconds
(Measure-Command { $Test = Get-ChildItem "*.*" -Recurse}).TotalSeconds + (Measure-Command {(get-FileHash -Algorithm MD5 $Test)}).TotalSeconds

# Total Files: 5244
# Seconds to run Bracketed GCI: 18.3848352
# Seconds to run Piped GI: 19.751385
# Seconds to run GCI to Object + Paramed hash: 17.5382904 (1.3471413 + 16.1911491)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...