Конвейер PowerShell
Содержание:
1.
2. Фильтрация с помощью Where-Object;
3. Выполнение действий с помощью ForEach-Object .
Работу стандартного входа можно увидеть, если ввести в окне PowerShell команду sort.exe. Аналогичный результат вы получите, если введете ее в командной строке (Cmd.exe).
После ввода этой команды курсор стоит на месте и ждет дальнейшего ввода, так как по умолчанию команда Sort.exe сортирует стандартный вход. Поскольку мы ничего не указали (по умолчания происходит сортиртировка стандартного входа), команда ожидает ввода и курсор стоит на месте. Для отмены действия команды нажмите комбинацию клавиш Ctrl+C. Теперь предположим, что существует файл с именем MyData.txt, данные в котором требуется сортировать. Вот как будет выглядеть на экране сортируемый выход файла (стандартный выход):
type MyData.txt | sort.exeВ этом примере команда Туре выводит содержимое файла MyData.txt как стандартный выход, который поступает на конвейер (|) и используется в качестве входа для Sort.exe. Таким образом, используя в команде символ конвейера (|), мы создаем конвейер. При этом выход команды слева от этого символа поступает на вход команды, находящейся справа.
В большинстве командных оболочек (например, Cmd.exe) стандартный выход и стандартный вход представляют собой текст. Это делает решение многих задач, связанных с различными манипуляциями с данными, неудобным и громоздким. На приведенном выше скриншоте показан пример «кульбитов», которые приходится сделать в Cmd.exe, чтобы всего лишь вывести список текстовых файлов, последний раз сохраненных в текущем году.
Сценарий Sample1.cmd выводит время последнего сохранения каждого файла, за которым следует символ жесткой табуляции, после чего выводится имя файла. Сценарий Sample2.cmd берег текущий год и выполняет Samplel.cmd, выводя лишь те файлы, у которых год последнего сохранения совпадает с текущим годом. Красная стрелка указывает на символ жесткой табуляции в обоих сценариях. На экране также показан выходной результат выполнения Sample2.cmd (File1.txt и File3.txt).
Отметим, что оба сценария предусматривают синтаксический анализ строк, зависящий от формата строки даты (%%~tF в Sample1.cmd и %DATE% в Sample2.cmd). В отличных от американо-англоязычных версиях Windows строки кода, где используется дата, придется корректировать, так как различные языковые стандарты используют разные форматы даты. Кроме того, из-за мудреного синтаксиса сценарии Cmd.exe малопонятны и неудобны в использовании (к примеру, что означает %DATE:~10,4%?).
Цель данного примера — продемонстрировать неуклюжее и громоздкое решение задачи, кажущейся простой (вывод списка файлов, созданных в текущем году). Здесь значительная часть проблемы обусловлена необходимостью выполнения синтаксического анализа строк для определения года. Кроме всего прочего, синтаксис года зависит от языкового стандарта, что может осложнить ситуацию хая сред, в которых сценарии используются коллективно. Заметим также, что с появлением дополнительных требований (например, удалить файлы, последний раз сохраненные до наступления текущего года) сценарии будут становиться все более громоздкими и сложными для восприятия. Должен существовать более удобный путь. Давайте посмотрим, как подобные задачи решает PowerShell.
У вас сломался холодильник и вам не до изучения конвейера PowerShell? В таком случае спешу вам сообщить, что ремонт холодильников на дому в Москве дешево (http://icehelp.ru/) максимально быстро решит вашу проблему. Ну, а после этого вы сможете с чистой совестью приступить к прочтению нашей статьи.