Monad

 Roadmap:

 

Scenario Today Tomorrow
GUI Shell MMC MMC with snap-ins layered on Monad
Command Shell CMD CMD SH CSH KSH Monad
Command Scripting CMD scripting CMD scripting Monad
COM Scripting WSH * VBScript * Jscript WSH * VBScript * Jscript Jscript (.NET)Monad

 

Monad (MSH, Microsoft Command Shell - Powershell). Haskell의 입출력용 타입인 모나드와는 전혀 틀리다.

 

What is Moand Cmdlet?

 

1. Cmdlet : 발음은 커맨드랫 또는 커맨드릿 ("command let")

 

2. MSH의 light-weight command를 나타낸다.

 

유닉스의 쉘이나 기존의 윈도우 도스 커맨트 창에서는 일부 내부 명령 (instrinsic command)를 제외한 대부분의 명령은 일반 Exe파일 또는 스크립트 파일이며 새로운 커맨드의 추가가 어려웠다. 그 반대라는 의미이다. 즉, 새로운 명령어의 추가가 쉽고 이들이 반드시 새로운 Exe일 필요는 없다는 뜻이다.

 

요약하자면 다음과 같은 특성을 가진다 :

 

- .Net 클래스의 인스턴스 (Instance)이며 개별적인 실행 파일이 아니다.

- 단지 몇줄의 소스로 제작이 가능하다.

- 파라미터 내지는 자료의 파싱, 에러 출력 또는 출력 및 포맷팅을 수행 하지 않으며 이는 기본 기능으로 제공 된다.
    * 입력 파라미터의 처리 또는 사용자 입력을 받기 위해서 Attributes를 사용해야 한다.

    * 결과 및 에러 출력을 위한 공통 API가 제공된다.

- 기존의 쉘과는 달리 입출력에 텍스트 스트림이 아니라 *객체*가 사용된다. 파이프라인을 통해서도 *객체*가 전달이 된다.

- 처리는 레코드 단위로 한번에 하나씩의 객체를 처리한다.

 

.Net Framework의 managed code인 Cmdlet을 작성하기 위해서는 다음의 기준을 따라야 한다 :

- Cmdlet을 구현하는 클래서는 직/간접 적으로 System.Management.Automatiuon.Cmdlet으로 부터 상속을 받아야 한다. (당연히)

 

- Metadata attribute [System.Management.Automation.Cmdlet(...)]이 클래스 소스에 정의 되어야 한다.

 

- BeginProcessing(), ProcessRecord()와 EndProcessing()과 같은 Virtual Method 중 적어도 하나 이상 override 되어 정의 되야 한다.

 

- Managed Code 인 만큼 언어에 대한 제약이 거의 없다. 따라서 C++, C#, VB.Net중 원하는 언어를 통하여 구현이 가능하다.

 

기타 정보 :

HKLM:\Software\Microsoft\MSH\[Namespace.ShellName]

 

https://www.powershell.com/ 도 한번 봐 주세요.