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/ 도 한번 봐 주세요.