Возможности фильтрации командлета Get-ChildItem. Часть 3.

В этой статье мы подробнее рассмотрим использование параметра -Exclude.

Это вторая часть серии.
Остальные статьи:
Возможности фильтрации командлета Get-ChildItem. Часть 1.
Возможности фильтрации командлета Get-ChildItem. Часть 2.

Наиболее простой вариант использования параметра -Exclude заключается в указании в качестве значения какого-либо имени файла или некоторой маски с целью исключить определенные элементы из вывода команды.

Например следующая команда:

Get-ChildItem -Path C:\rootfolder -Exclude *.ps1

выведет все дочерние элементы папки c:\rootfolder за исключением файлов с расширением .ps1.

19

Однако, у нас не получится таким же образом отфильтровать содержимое корня диска. Например, если мы зададим следующую команду:

Get-ChildItem -Path c:\ -Exclude *.ps1

то мы получим пустой вывод.

20

Происходит это, вероятно, потому, что использование параметра -Exclude подразумевает неявное применение параметра -Include *, что, как мы выяснили с предыдущих статьях, препятствует получению отфильтрованных результатов из корня диска.

Если мы укажем -Include * явным образом — результат будет тем же.

Get-ChildItem -Path c:\ -Include * -Exclude *.ps1

21

В качестве еще одного примера можно привести предыдущую команду, получающую все дочерние элементы каталога c:\rootfolder за исключением файлов .ps1.

Если мы добавим в нее параметр -Include со значением «*«, то получим те же самые результаты.

Get-ChildItem -Path C:\rootfolder\ -Include * -Exclude *.ps1

22

Естественно, мы можем использовать оба эти параметра для более точной фильтрации.

Например, следующая команда:

Get-ChildItem -Path C:\rootfolder\ -Exclude *.ps1 -Include rootfolder,fi*

позволит нам получить все элементы папки c:\rootfolder, имена которых начинаются с символов «fi«, с расширением, отличным  от .ps1.

23

Как вы помните из предыдущих статей — так как мы не указали «*» после имени каталога (c:\rootfolder), мы должны добавить его в значение параметра -Include.

Следующая команда:

Get-ChildItem -Path C:\rootfolder\* -Exclude *.ps1 -Include f*

выведет все элементы, начинающиеся с символа «f«, но не обладающие расширением .ps1 в папке c:\rootfolder и ее подпапках.

24

В случае, если нам все-таки потребуется вывести элементы корня диска с применением некоторых условий фильтрации, то для этого мы можем воспользоваться командлетом Get-Item.

Команда:

Get-Item -Path c:\* -Include f* -Exclude *.ps1

выведет нам все дочерние элементы диска c:, начинающиеся с символа «f«, но не обладающие расширением .ps1. Так как командлет Get-Item, в отличие от Get-ChildItem, по умолчанию получает только объект, указанный в параметре -Path, а не его дочерние элементы, мы добавили звездочку после имени диска — c:*.

25


Страницы в социальных сетях:

Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


Реклама

Один ответ на “Возможности фильтрации командлета Get-ChildItem. Часть 3.

  1. Дмитрий Апрель 12, 2016 / 13:55

    Странное поведение Get-Childitem -exclude в корне диска. Спасибо за статью, наткнулся, когда возникла проблема и искал оптимальное решение.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s