Вот главные цели, преследуемые разработчиками Monad:
командная строка как основной интерфейс администрирования;
реализация ObjectFlow (элементом обмена информации является объект);
переработка существующих команд, утилит и оболочки;
интеграция командной строки, COM– и .NET-объектов;
работа с произвольными источниками данных в командной строке по принципу файловой системы.
По словам разработчиков, сильное влияние на Monad оказали следующие продукты:
BASH, KSH – композиционность;
AS400/VMS – стандарт синтаксиса именования команд, облегчающий изучение;
TCL/WSH – поддержка встраиваемости и нескольких языков;
PERL, PYTHON – выразительность и стиль.
Участники команды оценили разные аспекты администрирования систем и попытались собрать все лучшее в одном продукте.
В качестве примера я написал плагин, который позволяет управлять воспроизведением музыки в Monad (полный код можно найти в [4]). Ниже приведена реализация команды play-nextsong на языке C#, которая переключает воспроизведение на следующую композицию:
[Cmdlet(«play», «nextsong»)]
public class PlayNextSongCommand : Cmdlet
protected override void EndProcessing()
Media.Player.controls.next();
Этого достаточно чтобы пользователь смог найти команду и узнать, как с ней работать:
Media:\Slayer\Reign In Blood> get-command play*
Command Type Name Definition
– – –
Cmdlet play-nextsong play-nextsong [-Verbose…
Cmdlet play-previoussong play-previoussong [-Ver…
Cmdlet play-song play-song [[-MshPath] S…
Можно усложнить команду, добавив к ней несколько параметров. Даже если разработчик не позаботился о документации, пользователь сможет получить автоматически генерируемую справку о формате ее вызова и типах параметров:
Media:\Slayer\Reign In Blood> get-command play-nextsong –Synopsis
play-nextsong [[-SkipSongCount] Int32] [-Verbose] [-Debug] [-ErrorAction ActionPreference] [-ErrorVariable String] [-OutVariable String] [-OutBuffer Int32]
А вот так выглядит листинг содержимого текущей директории. Директория не обязательно файловая, это может быть контейнер любых объектов, в нашем случае это альбом, а содержимое – композиции:
Media:\Slayer\Reign In Blood> ls
Number Name AlbumName ArtistName Year
– – – –
1 Angel of Death Reign In Blood Slayer 1986
2 Piece By Piece Reign In Blood Slayer 1986
3 Necrophobic Reign In Blood Slayer 1986
Что же дает Monad различным категориям пользователей? Программисты, например, смогут ускорить реализацию интерфейсов управления к разрабатываемым системам. Для того чтобы создать новую команду, достаточно унаследовать свой класс от класса Cmdlet и вызвать из него специфичную функцию системы (см. врезку). Отметим, что, реализовав интерфейс управления к своей программе таким образом, разработчик не ограничивается только командной строкой. Стандартная графическая консоль управления Microsoft Management Console (MMC), используемая в Windows XP и Vista, будет понимать модули, написанные для Monad.
Администраторам разнородных сетей, безусловно, будет удобнее управлять Windows-системами, с помощью привычного интерфейса командной строки. Инструменты управления DNS и Active Directory с навигацией, реализованной в виде иерархической структуры, тоже разрабатываются, и их можно найти в Интернете.
Администраторы смогут скомпоновать из разных блоков командную оболочку для определенных типов задач. Ее можно указать в качестве сценария запуска (login shell) при входе определенной группы пользователей в систему – локально или удаленно. Тем самым можно ограничивать функции, доступные пользователям, а требования к пропускной способности канала в случае распределенной системы будут минимальными, достаточными для протокола telnet.
Ну а продвинутые юзеры, знающие .NET или использующие готовые скрипты (см. ссылки в конце статьи), получают мощный инструмент управления системой и повышения эффективности работы. Не должно вызвать трудностей и освоение команд и синтаксиса нового языка, так как их именование стандартизовано.
Не могу удержаться от соблазна сразу же привести пример. Людям, знающим предметную область, он многое объяснит.
Требуется написать скрипт, принудительно завершающий в системе три процесса, которые отъедают наибольшее количество процессорного времени и у которых значение этого параметра больше трех.
Я попросил специалиста Unix shell быстро, не зарываясь в man, написать такой скрипт.
Решение SH:
%>ps -A -sort ‘%cpu’ -format ‘%cpu,pid’ | egrep -v ‘^ (0|1|2).’ | grep -v ‘%CPU’ | tail –n3 | gawk ‘{print $2;}’ | xargs -r kill
Скрипт написан за семь минут, работает, и я его привожу как есть – без исправлений. Не буду объяснять, как он работает, отмечу лишь, что главной проблемой является необходимость выделения из набора строк, возвращаемых командой ps, нужные нам параметры процессов (в данном случае – процессоное время).
Я уверен, что есть более правильные варианты, но они потребуют детального знания возможностей большого числа утилит.
Решение Monad:
C:\> get-process | where-object { $_.cpu -gt 3 } | sort-object -property cpu | select-object -Last 3 | foreach-object { $_.Kill() }
get-process – функция, возвращающая массив объектов типа System.Diagnostics.Process;
where-object – функция условия, которая сравнивает значение свойства с тройкой;
$_ – переменная, содержащая элемент массива – объект класса Process;
sort-object, select-object – сортировка и фильтрация массивов;
foreach-object – выполнить код для каждого элемента, в нашем случае – вызвать метод объекта – Kill()
Эту же строку можно написать с использованием алиасов:
C:\> ps | where { $_.cpu -gt 3 } | sort cpu | select -Last 3 | foreach { $_.Kill() }
Читаемость варианта Monad даже не имеет смысл сравнивать с SH-скриптом. Написано за минуту.
Не будет преувеличением сказать, что Monad – это качественный скачок, переосмысление накопленного опыта в области управления операционных систем. В заключение несколько слов о том, когда же наступит светлое будущее.
Релиз Monad должен появиться в составе Microsoft Exchange Server 12. Он работает на системах Windows XP, Windows Server 2003 или других системах, поддерживающих .NET Framework 2.0. Beta 3 находится в свободном доступе (download.microsoft.com).
Ссылки
[1]blogs.msdn.com/monad/de-fault.aspx (сайт разработчиков Monad).
[2]www.microsoft.com/tech-net/scriptcenter/hubs/msh.mspx
[4]blogs.gotdotnet.ru/perso-nal/beerbong (блог автора статьи).
[5] Издательство O’Reilly в декабре 2005 года выпустило книгу «Monad» (ISBN: 0-596-10009-4), написанную одним из авторов платформы Энди Оукли (Andy Oakley). Это, пожалуй, самый лучший способ познакомиться с продуктом.
Автор благодарит Константина Беляева за доклады на GotDotNet User Group.
Софтерринки
Автор: Павел Каледа
ОС: Windows
Адрес:www.crazybrowser.com