Представляем Monad, новую командную строку MSH (Часть 3)

Автор: Topol Воскресенье, Апрель 22nd, 2012 Нет комментариев

Рубрика: Операционные системы

Это третья статья из цикла о 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 отсортирует полученные данные в алфавитном порядке и выведет результат на экран.

Источник: thevista.ru

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты