Call now: 252-767-6166  
Oracle Training Oracle Support Development Oracle Apps

 E-mail Us
 Oracle Articles
New Oracle Articles

 Oracle Training
 Oracle Tips

 Oracle Forum
 Class Catalog

 Remote DBA
 Oracle Tuning
 Emergency 911
 RAC Support
 Apps Support
 Oracle Support

 SQL Tuning

 Oracle UNIX
 Oracle Linux
 Remote s
 Remote plans
 Application Server

 Oracle Forms
 Oracle Portal
 App Upgrades
 SQL Server
 Oracle Concepts
 Software Support

 Remote S


 Consulting Staff
 Consulting Prices
 Help Wanted!


 Oracle Posters
 Oracle Books

 Oracle Scripts

Don Burleson Blog 







Monad : Microsoft .NET shell script language

Oracle Tips by Burleson Consulting
Don Burleson

By Mark Rittman

Microsoft announces new shell programming language


Monad : Microsoft's .NET Answer To BASH and KSH?

One of the more interesting features coming with Microsoft 'Longhorn' is Microsoft Shell, a.k.a. 'MSH' or by its codename 'Monad'. Monad is a Unix-like command shell for Longhorn that aims to be as interactive as KSH or BASH, as programmable as Ruby or Perl, but with an object orientated base in Microsoft .NET. This blog posting by Wesner Moise sums it up well:

"Microsoft is introducing a new command-line shell, codenamed Monad, into Longhorn. If you have a Longhorn build, you can use the new shell by launching "msh.exe."

The Good

New-style commands (or commandlets, as they are called in Longhorn) are .NET libraries (plus associated .msh or .cmdlet file) that consist of classes driving from CmdLet. Through the magic of reflection, Monad performs all the parsing and validation of switches and maps them to properties of your new class. Attributes are used to indicate whether properties are mandatory, optional, or produce prompting if omitted. Monad also will eventually support Intellisense and help for cmdlets.

Commands can output .NET objects not just text. For example, you can enter

get/process | where "handlecount -gr 400" | sort handlecount | format/table processname,handlecount

You get:

ProcessName HandleCount
---------------- ---------------
processname handlecount
... ...

Get/Process returns a sequence of process objects, which is filtered to include only those processes with a HandleCount property exceeding 400, then sorted and formatted to show a table of two columns. These objects are treated like records, and can be output to various formats besides text, such as an Excel spreadsheet.

Other notables: In addition to the standard input, output, and error steams, there can be additional streams used by cmdlets such as for verbose mode, progress status, and debug mode. Drives can not just be mapped to the filesystem, but also to other heirarchies like the registry database. The scripting language is designed to be as powerful as Perl, as it includes typed variables, functions, property accessors and method calls, and associative arrays.

The Bad

The new shell, as it stands now, is not very usable as a routine interactive shell, so, at least in this build, you'll gravitate back to the familiarity and simplicity of cmd.exe.

Monad is not quite a superset of the XP cmd shell. You can execute traditional commands as before, but the built-in commands all behave different. For example, in the most basic of operations, listing the current directory (ie, typing "dir") produces the directory contents but in user-unfriendly manner. I sure hope that the new shell undergoes usability testing, since the new shell syntax is unfamiliar and does require learning."

I was reminded about Monad by a recent posting by Adam Barr (author of "Proudly Serving My Corporate Masters", one of the best books on the Microsoft developer culture) where Adam points out that a recent set of powerpoint slides on Monad got linked to on Slashdot.

Monad : Microsoft .NET shell script language

What makes Monad particularly interesting (apart from the fact that it's finally a decent shell for Windows) is that each of the shell commands (known as "cmdlets" is in fact a .NET class - more analogous to a .DLL than an .EXE - and you can pipe data between objects using their published interfaces. This slashdot posting by Earlybird (56426) sums it up well:

"Microsoft is doing something interesting and innovating. The Unix world could use this.

Basically, Monad formalizes in .NET the pipe interface between shell programs. A pipe participant is just something that implements the appropriate "commandlet" interface: it receives some input, produces some output, maybe some errors.

However, in the case of Monad the input and output can be anything, not just text. So in the example:

get-process | where "handlecount ?gt 400" | sort handlecount | out-chart processname,handlecount

The get-process command produces a sequence of processes; where filters it based on an attribute; sort sorts on an attribute, and out-chart produces a textual table of the filtered output.

It's important that the input and output of these processes are structures (actually, objects, but I don't want to tickle anyone's prejudices about OOP). .NET knows at runtime about the attributes these structures can have, so you can write apps that manipulate a wide variety of object types: files, metadata-annotated documents, log entries, whatever.

Naturally input/output can be pure text, allowing all the traditional Unix commands such as grep.

Immediate benefit? If you have the right translator, there's no need to munge text output using awkward tools like tr, cut, awk and so on, just to get at the process ID column of ps or the URL column of the Apache log file.

This is better than Unix shells."

Interesting stuff. In terms of it's significance, another poster sums it up well with this the comment: "I actually feel its kinda complementary to the Unix shell environment. This looks more like VBA on steroids, the .NETized version probably. Passing around structures has been done in MS world for a long-time - excel sheet processing, macro viruses etc. I think similar results can be achieved using DCOP/KDE or the GNOME equivalent, probably KDE , GNOME hackers can comment on that." You can download the presentation here, read more here, and if you're interested in trying Monad out on XP or 2000 you can sign up for a beta (guest ID "'mshPDC") at



Oracle Training at Sea
oracle dba poster

Follow us on Twitter 
Oracle performance tuning software 
Oracle Linux poster


Burleson is the American Team

Note: This Oracle documentation was created as a support and Oracle training reference for use by our DBA performance tuning consulting professionals.  Feel free to ask questions on our Oracle forum.

Verify experience! Anyone considering using the services of an Oracle support expert should independently investigate their credentials and experience, and not rely on advertisements and self-proclaimed expertise. All legitimate Oracle experts publish their Oracle qualifications.

Errata?  Oracle technology is changing and we strive to update our BC Oracle support information.  If you find an error or have a suggestion for improving our content, we would appreciate your feedback.  Just  e-mail:  

and include the URL for the page.


Burleson Consulting

The Oracle of Database Support

Oracle Performance Tuning

Remote DBA Services


Copyright © 1996 -  2020

All rights reserved by Burleson

Oracle ® is the registered trademark of Oracle Corporation.