В этой статье мы рассмотрим использование параметра -Filter.
Это вторая часть серии.
Остальные статьи:
Возможности фильтрации командлета Get-ChildItem. Часть 1.
Возможности фильтрации командлета Get-ChildItem. Часть 2.
Возможности фильтрации командлета Get-ChildItem. Часть 3.
Параметр -Filter, равно как и параметры -Include и -Exclude, используется для фильтрации результатов выполнения командлета. Однако он отличается тем, что при его использовании, результаты отфильтровываются непосредственно при получении элементов (например, папок и файлов с диска файловой системы). Что касается параметров -Include и -Exclude, то они действуют уже после того, как все результаты получены, что несколько снижает эффективность команды, хотя вряд ли это будет заметно при обычном использовании.
В качестве значения параметра -Filter мы может указать имя какого-либо элемента или некоторый шаблон.
Команда:
ls -Path C:\rootfolder -Filter *.ps1
выведет нам все файлы с расширением .ps1, находящиеся в папке c:\rootfolder.
Если мы укажем «*» после имени папки, это не окажет влияния на результаты:
Get-ChildItem -Path C:\rootfolder\* -Filter *.ps1
Также в качестве фильтра мы можем указать имя папки, например:
Get-ChildItem -Path C:\rootfolder -Filter folder1
Если же в значении параметра -Filter после имени папки мы добавим «\«:
Get-ChildItem -Path C:\rootfolder -Filter folder1\
то команда выведет все дочерние элементы папки folder1, расположенной в c:\rootfolder.
Такой же эффект будет, если указать в качестве значения фильтра «folder*»
Get-ChildItem -Path C:\rootfolder -Filter folder1\*
Также в качестве значения параметра -Filter мы можем указать «folder1*.ps1»
Get-ChildItem -Path C:\rootfolder -Filter folder1\*.ps1
Это позволит нам получить файлы с расширением .ps1, расположенные в папке c:\rootfolder\folder1.
Мы можем пойти еще дальше, и указать в качестве фильтра «folder1\sub1*.ps1»
Get-ChildItem -Path C:\rootfolder -Filter folder1\sub1\*.ps1
Эта команда в качестве результата выведет файлы с расширением .ps1 из каталога c:\rootfolder\folder1\sub1.
Однако, сделать, например, такую вещь у нас не получится:
Get-ChildItem -Path C:\rootfolder -Filter *\*.ps1
Также стоит сказать, что параметр -Filter, в отличие от -Include и -Exclude не принимает множественных значений, то есть мы не сможем сделать следующее:
Get-ChildItem -Path C:\rootfolder -Filter *.ps1,*.xml
Страницы в социальных сетях:
Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell