Представляем Monad, новую командную строку MSH (Часть 3)
Это третья статья из цикла о Monad - новой командной строке от Microsoft. По соответсвующим ссылкам, можно найти
В этой части мы рассмотрим изменения, касающиеся т.н. "трубопровода данных" - data pipeline.
Создание трубопровода для передачи данных
Старая командная строка Windows - cmd.exe, поддерживала возможность перенаправить данные, возвращенные процессом, в различные локации. Именно это и есть трубопровод данных. Для его задания используется символ "|". Встретив такой символ, командная строка передаст выходные данные одной команды в другую, но уже в качестве вводных. Таким образом, можно выстроить цепь команд.
Очевидно, что трубопровод не является новинкой - подобный метод используется для передачи данных между процессами практически во всех существующих командных строках. Но и здесь, как и в других областях, MSH на шаг впереди. Так, среди ее возможностей есть не только передача по трубопроводу простых текстовых команд, но и возможность передавать Strong Type Objects - объекты, в которых сохраняется не только сама информация, но и структура, в которую она организована.
Передача Strongly Typed Data обладает несколькими значительными преимуществами. Во-первых, это возможность избежать необходимости работы процесса-генератора и процесса-приемника с данными в одинаковой кодировке. Во-вторых, при сохранении структуры данных отпадает необходимость писать трудоемкие парсеры, переводящие информацию из потока данных, понятного процессу в поток, предстающий перед конечным пользователем.
Композитные данные - тот самый "двигатель прогресса" в MSH. Композитными данными автор статьи называет комбинации различных небольших функциональных модулей, вместе создающих некий апплет. Такими модулями, например, могут быть исследованные нами в первой и второй частях статьи cmdlets.
Фраза "целое - это больше, чем просто сумма частей" очень хорошо подходит для описания самой идеи композитных данных в MSH. В большинстве случаев конкретное задание можно разбить на несколько четких шагов. Вместо того чтобы пытаться решить задачу целиком, давайте сначала научимся качественно реализовывать подзадачи.
Так как мы уже вполне комфортно чувствуем себя в обращении с cmdlet get-process, начнем именно с него. Нашей задачей будет создание трубопровода данных с вводным cmdlet where-object и его применение к каждому проходящему через трубопровод объекту:
MSH D:MshScripts> get-process | where-object { $_.Handles -gt 200 }
Handles NPM(K) PM(K) WS(K) VS(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
624 13 10548 15756 65 25.01 1656 CcmExec
407 5 1684 3420 23 22.71 464 csrss
274 11 7376 12696 55 565.91 212 explorer
404 10 4472 2376 42 16.12 544 lsass
282 12 35028 32416 176 21.93 3088 msh
260 6 1276 2864 24 14.54 532 services
1709 52 18092 24888 103 62.37 824 svchost
209 6 2080 4320 36 4.80 940 svchost
262 14 1500 3988 34 11.43 756 svchost
284 0 0 216 2 77.96 4 System
551 61 7332 4136 51 19.24 488 winlogon
225 8 6364 7888 66 3.00 1708 wuauclt
Возможности трубопровода не ограниченны двумя уровнями:
209 6 2080 4320 36 4.80 940 svchost
260 6 1276 2864 24 14.54 532 services
262 14 1500 3988 34 11.64 756 svchost
274 11 7376 12696 55 580.04 212 explorer
284 0 0 216 2 78.89 4 System
405 10 4472 588 42 16.28 544 lsass
407 12 34632 33052 175 23.16 3088 msh
408 12 18432 19221 99 20.01 3089 msh
414 5 1684 3420 23 24.42 464 csrss
551 61 7332 4136 51 19.34 488 winlogon
618 13 10352 15740 64 25.38 1656 CcmExec
1748 53 18312 24964 105 63.40 824 svchost
Использование инструментов наследования
MSH позволяет использовать не cmdlet-команды в качестве части трубопровода. Выходные данные такой цепи команд будут представлены в виде списка строк данных. Например, команда ping 127.0.0.1 | sort-object будет работать, но возможно не даст желаемого результата. MSH отсортирует полученные данные в алфавитном порядке и выведет результат на экран.
Источник:
Перевод: swissglide
По теме
- Параллельная реальность: Windows 8 на Mac
- Обзор Parallels Desktop Upgrade for Windows 7
- Автоматизация резервного копирования данных с помощью CloudBerry Backup
- Обзор Exchange 2010 Beta
- Новые возможности DirectX 11: динамическое подключение шейдеров и сжатие текстур
- Новые возможности DirectX 11: многопоточный рендеринг
- Новые возможности DirectX 11: вычислительный шейдер
- Новые возможности DirectX 11: тесселяция
- Новые возможности DirectX 11: новый конвейер
- 10 футуристических UI