MSH (shell)
From Free net encyclopedia
Template:Future software Image:MSH.PNG MSH, or Microsoft Shell (codename Monad), is a command line interface (CLI) shell and scripting language product being developed by Microsoft. The interface is similar to Unix shells, but the product is based on object-oriented programming and the Microsoft .NET framework, and is highly extensible.
Microsoft originally intended to launch MSH along with Windows Vista, but later defined a separate release schedule for MSH. Microsoft sources confirm that MSH's first general availability release is to be part of the next edition of Microsoft Exchange Server (code named Exchange 12) which is scheduled for release in the second half of 2006. Microsoft published the second "Monad" public beta release on September 11, 2005 and released Beta 3 on January 10, 2006. The latest version is Beta 3.1 and it was published on February 27, 2006.
MSH requires .NET Framework v2.0. Currently MSH is supported only on Windows XP, Windows 2003, Windows Vista, and Windows Server "Longhorn". MSH is currently not supported on the Itanium platform - Microsoft is still evaluating the need for an Itanium version of MSH.
Contents |
History
Every released version of Microsoft DOS and Microsoft Windows for personal computers has featured a command line interface tool. These have been command.com (in installations relying on MS-DOS) and cmd.exe (in Windows NT and later installations). These were not always capable of reproducing or automating all the administrative functions available in the graphical user interface (GUI), although under Windows Server 2003, this situation is improved. This has been due to a combination of limitations within the command-line equivalents or because Microsoft did not provide full fidelity command-line equivalents.
Additionally, for Unix admins, neither command.com nor cmd.exe are POSIX.2-conformant. Microsoft's Services for UNIX does include a POSIX.2-conformant shell pdksh but this and other Unix shells are still incapable of performing many routine tasks relegated to the Windows GUI. While the Services for UNIX suite is now built into Windows Server 2003 R2, it was previously a for-sale add-on, which provided a barrier to adoption.
Users have also been hindered by a lack of adequate documentation of command line functionality. By contrast, many GUI applications in Unix are only wrappers for documented command-line tools.
Microsoft attempted to address some of these shortcomings by introducing the Windows Script Host in 1998 with Windows 98. The Windows Script Host was a new scripting layer which could implement a variety of scripting languages to control applications. However, the Script Host proved unpopular because it was not integrated with the shell, its documentation was not very accessible, and it quickly gained a reputation as a system vulnerability after several high-profile computer viruses exploited substantial weaknesses in its security provisions.
Windows Server 2003 and certain versions of Windows XP included a command-line-based script host called Cscript.exe, but it was not fully integrated into the shell (cmd.exe). These operating systems provided other ad hoc CLIs as well, but they were not fully integrated, either.
Microsoft designed MSH to mitigate these problems—and to alleviate their onus of developing discrete GUI and CLI applications—by integrating a more secure scripting language into a new, extensible command shell capable of performing and automating the same core administrative tasks as the GUI. In most everyday tasks, MSH can be used in place of CMD.EXE and Windows Script Host (WSH). However, for backwards compatibility purposes both CMD.EXE and WSH will no doubt be around for a long time.
Central concepts
The system's codename, Monad, comes from Gottfried Leibniz's monadology, a philosophy in which the universe is a composite of fundamental elements called Monads that are integrated in a 'pre-established harmony'. Similarly, MSH is a composite of the complex tasks of a series of components. The components are special programs called cmdlets (pronounced command lets), which are .NET classes designed to use the features of the environment. The key difference between the usual Unix approach and the MSH one is that rather than creating a "pipeline" based on textual input and output, MSH passes data between the various cmdlets as objects (structured data). Unix does not preclude the use of arbitrary streams of data being passed between command line utilities, but textual input and output is the primary and most popular model.
If accessed individually from the command-line, a commandlet's output will automatically be converted into text, but if its output is to be used by another commandlet, it will be converted into whatever form of object is most appropriate for that commandlet's input. This has the advantage of eliminating the need for the many text-processing utilities which are common in Unix pipelines, such as grep and awk, as well as allowing things to be combined interactively, or in a scripting environment, which would otherwise require a more complex programming language. For instance, a listing of processes will consist not of text describing them, but objects representing them, so that methods can be called on those objects without explicit reference to any outside structure or library.
MSH is part of an overall strategy, centered around Vista, to treat all parts of the OS as .NET objects.
Features
Although still in development, a number of key features of MSH have already been revealed, including:
- A C#-like scripting language with many power user features such as direct support for hashtables, switch statements that can case on regular expressions, array slicing and anonymous methods (script blocks) that can be stored as data and then later executed. That is in addition to the normal scripting language features such as looping (for/foreach/while), conditionals (if/switch), variable scoping (global/script/local/private) and the abililty to define functions.
- Cmdlets all inherit certain options, allowing the user to choose things such as the level of interaction and how to deal with errors - including a "suspend" feature, which allows the user to enter a new command shell, investigate a problem, and then continue with the original command. A simple mechanism is built-in for the programmer to define the prompts to be shown in such circumstances.
- An extensible provider model provides not only access to and manipulation of the file system but also other hierarchical stores. For instance, MSH comes with a registry provider that allows you to access the regisry via the "HKLM" and "HKCU" drives. With this, you can browse the registry by executing commands like "dir HKLM:\SOFTWARE\Microsoft" at the shell prompt. MSH comes with providers for the certificate store as well as environment variables, shell variables, functions and aliases. Like cmdlets the provider model is extensible allowing third parties to create their own provider model and snap it into MSH.
- The command line options are generally whole words, but can be specified as the minimum number of letters necessary (e.g. the option
-show-detailed-information
could be entered as-s
if no other option began with 's') - Comprehensive tab completion features. The cmd.exe shell in current versions of Windows can only complete file or directory names, in contrast to the advanced completion in shells such as bash.
- The ability to assign the output of a command to a variable, which will then be an object or array of objects inspectable in any way desired. For example you can output a command result directly to Excel.
External links
- Monad Product Links
- Windows "Monad" Shell Beta 3.1 x86 Download Microsoft has released MSH Beta 3. To download this beta, you need to register (i.e. sign in with a .NET Passport). To install MSH Beta 3, you must have the Microsoft .NET Framework 2.0 RTM installed.
- Windows "Monad" Shell Beta 3.1 AMD64 Download (must sign in, as with the x86 download)
- Windows "Monad" Shell Beta 3 Documentation Pack
- Monad Blogs and Blog Posting References
- Monad and the "First Vista Virus" - a Microsoft developer's rebuttal of security concerns
- An outdated set of links to blog entries related to MSH/Monad
- An up to date list of links to more information about Monad-MSH
- del.icio.us tags: monad msh monad+msh
- Links to Monad blogs.
- Sample Monad Scripts
- A set of sample MSH scripts which you can download and use.
- Monad Articles
- A guided tour of the Microsoft Command Shell - A comprehensive, 13-page overview that thoroughly examines many aspects of MSH syntax, security, and .NET integration.
- Monad: The Future of Windows Scripting - an article in TechNet Magazine by Thomas Lee.
- Future Windows component could spur old-school script viruses - Monad's role in future security concerns, by Paul Roberts, IDG News Service
- Other Monad Resources
- The .NET Show - a Microsoft video discussing various aspects of .NET and Vista (codenamed Longhorn). Search for "Jeffrey Snover" in the transcript for the discussion of MSH/Monad
- Channel 9 Video: More talking about Monad - This episode interviews the Monad architect: Jeffrey Snover.
- Channel9 Wiki: MSHWiki - A blog dedicated to MSH and MSH Scripts
- JaMSH - jaMSH is an interactive shell for Monad/MSH written to feel less like a DOS Prompt and with vi-mode command line editing.
- MSH Analyzer - MSH Analyzer - an interactive GUI shell for MSH, with rich editing, and a variety of ways to visualise returned data.
- Monad Remoting - Monad Remoting - an light-weighted server-client application to provide secure remote access to MSH.de:Microsoft Command Shell