Новость из категории: Информация

Конвейер PowerShell: фильтрация с помощью Where-Object

Содержание:


1. Стандартный вход и выход;
2. Фильтрация с помощью Where-Object (Вы читаете данный раздел);
3. Выполнение действий с помощью ForEach-Object .
Конвейер PowerShell: фильтрация с помощью Where-Object

Как уже говорилось, стандартный выход и стандартный вход — это средство, позволяющее командным оболочкам на базе текста (например, Cmd.exe) реализовать конвейерную передачу текстовых данных между программами. Конвейер PowerShell использует ту же основную схему, в рамках которой выход одной команды подается на вход другой команды, с той лишь разницей, что в этом случае выход и вход — это объекты, а не текст. При своей принципиальной простоте данная концепция имеет далеко идущие результаты.

Рассмотрим предыдущий пример: задача вывода списка файлов *.txt, в последний раз записанных в текущем году. В PowerShell это делается путем извлечения объектов файловой системы (Get-ChildItem) и выбора (Where-Object) только тех из них, у которых значением свойства LastWriteTime является текущий год:
Get-ChildItem *.txt | Where-Object {


  $_.LastWriteTime.Year -eq (Get-Date).Year

}

Эту команду можно записать в одну строку, но я разбил ее на несколько строк, чтобы облегчить восприятие. Код между фигурными скобками {} называется блоком сценария. В блоке сценария Where-Object переменная $_ означает «текущий объект с конвейера». Таким образом, данная команда предписывает «взять объекты файловой системы, относящиеся к типу *.txt (Get-Childltem *.txt) и вывести из них только те, у которых (Where-Object) год последнего сохранения ($_.LastWriteTime.Year) равен (-eq) текущему году ((Get-Date).Year)».



Как видно из этого примера, команда Where-Object позволяет фильтровать объекты, подаваемые слева на конвейер. В качестве результата выводятся объекты, удовлетворяющие критерию, указанному в фильтре. Заметим, что синтаксический анализ даты не проводится, а просто определяется год последнего сохранения каждого файла.

Теперь предположим, что требуется удалить файлы, последнее сохранение которых выполнялось до начала текущего года. Чтобы решить эту задачу, достаточно немного изменить фильтр и подать результат по конвейеру на вход Remove-Item:
Get-ChildItem *.txt | Where-Object {


  $_.LastWriteTime.Year -lt (Get-Date).Year

} | Remove-Item

Все, что мы изменили, — использовали -It (меньше) вместо -eq (равно), а затем после символа конвейера добавили команду Remove-Item.

В этих двух командах PowerShell вместо передачи текстовых строк между командами передаются объекты: файл — это объект; дата его последнего сохранения — тоже объект.


Обязательно изучите фильтрацию в PowerShell при помощи Where-Object, но только после того как следует отдохнете? Русские фильмы cмотреть онлайн бесплатно в хорошем качестве HD 720 (http://filmhd720.net/) - идеальный способ расслабиться и на время забыть о бытовых проблемах. Ну, а после вы сможете приступить к изучению материала нашей статьи.

Рейтинг статьи

Оценка
1/5
голосов: 2
Ваша оценка статье по пятибальной шкале:
 
 
   

Поделиться

Похожие новости

Комментарии

^ Наверх