Поиск по сайту:

PowerShell: Фильтрация объектов против Where-Object


В этой статье я собираюсь сравнить параметр фильтра с оператором where-object. Учение говорит, что фильтрация более эффективна. В случае with оператором where-object все объекты должны быть сначала извлечены, а затем выполняется фильтрация. Это занимает время. Если сначала отфильтровать, будут извлечены только отфильтрованные объекты. В этой статье мы рассмотрим это с помощью Measure-Command.

Get-Childitem и Where-Object

Measure-Command {Get-Childitem -Path C:\ -File -Recurse -ErrorAction SilentlyContinue | Where-Object {$_.Extension -eq ".txt"}}

37 секунд — это неплохо. У меня есть SSD.

Get-Childitem с фильтром

Measure-Command {Get-Childitem -Path C:\ -File -Recurse -ErrorAction SilentlyContinue -Filter *.txt}

8 секунд - это намного быстрее.

Заключение

Фильтрация значительно быстрее. Но не все команды предлагают возможность фильтрации. Во многих записях я использую where-object вместо параметра фильтра. Почему? Я к этому привык. Думаю, мне нужно измениться. 😉 См. также мою статью Measure-Command: Сравнение скорости (Foreach против Foreach-Object).