Menu

consoleEX and Monad

2004-10-12
2013-06-12
  • Rob Davenport

    Rob Davenport - 2004-10-12

    I recently learned about a new SF project that's still in the pre-alpha stage but looks promising.

    As you may know, Microsoft is coming out with a new, enhanced shell, MSH (codename Monad), with Longhorn.  They've studied and taken (of course) what looks like the best concepts from the *nix shells and merged them into their vision of .NET and the frameworks and namespaces in their OS.
    Of course this is all to benefit sysadmins of large installations by allowing them to access anything via the command-line for better remote administration of many computers, but the general user will likely benefit as well.

    The syntax is different, being "<verb>-<noun>" as in "get-content" to do a "dir" and "get-drives" to list the drives.  ("dir" is now just an alias to "get-content".)
    A fundamental change is that commands pass their results to back as .NET things and they can be chained together in scripts.  Similar to *nix and even Windows piping, but it's with full objects, not just simple character streams.
    The best thing though is that you can extend the shell with your own "commandlets".
    You can google around for MSH.  There's a beta program that's apparently very open.  It needs .NET 2.0, but will run on 2K, XP, and up, IIRC.

    Stuart Carnie had started a project, consoleEX, that would hook into the console support in Windows at a very low level (below the Read/Write console APIs) and redirect them into his own window.  That sounded really promising and then he learned about MSH and saw even greater possibilities for consoleEX with MSH.
    Imagine a console window that looks and acts very much like the ones we have now, but vastly more extensible; one where you could get a directory listing that shows little thumbnails of any images in the listing, or sends the listing to an HTML or XML file with a simple command-line switch. 
    The administration possibilities are vast with MSH and adding consoleEX adds in even greater customizeability and the opportunities for eye-candy - er, "pleasing environment options" is also increased.

    It's still in the works, but the MSH beta can be tested out (I haven't yet, but want to look into it).

    Bozho, maybe you've got some coding knowledge/ability that could help that project out (if it's interesting to you) or maybe it'll have some ideas on how to improve Console (the ability to hook into low-level console API functions sounds like it has possibilities).

     
    • Rob Davenport

      Rob Davenport - 2004-10-12

      For those interested, a good video overview of Monad is the .NET show (Microsoft's self-created webshow promoting .NET and previewing Longhorn technologies).
      <http://msdn.microsoft.com/theshow/episode043/default.asp>
      Just watch the Enter the Programmer section (the others are interesting too but not about Monad).

      The lead designer and architect of Monad talk about it's goals - to help automate the system.  It's made up of four components:
      - an interactive shell like ksh or bash
      - programmatic like Perl or Ruby
      (so you don't have to switch tools when you need to make more complicated scripts/solutions)
      - focussed on production, with features similar to VMS' DCL and AS400 - trying to solve admin's problems
      - make the management information in your system as easy to find as files in the file system.

      MSH is a "hosting environment" for commandlets (.NET classes) that does a lot of work (like error handling and command-line parsing (you just specify the options and error messages, it does the processing).

      There's a transcript button on the viewer that you can use to just read the transcript and see screenshots but listening to Mr. Snover (the 'father of Monad') is interesting.

       
    • Ken Allen

      Ken Allen - 2004-10-12

      I've played with the MSH beta a bit and it looks really neat. It's too bad the current alias implementation blows :P I'm wondering if 4NT will rewrite for the new paradigm or if I'll end up switching to MSH. Hmmm.

      I take it ConsoleEx replaces the standard console window, rather than wrapping it like Console does? That's pretty sweet, I'll check that out.

       
    • Rob Davenport

      Rob Davenport - 2004-10-12

      I don't have the beta yet (waiting on the intro email to give me an ID).  So they got aliases wrong?  Even after learning so much from ksh and bash?  In that video, the designer guy sure seemed to understand *nix shells so I wonder how they got it wrong.  Or maybe it's just not fully implemented yet?

       
    • Ken Allen

      Ken Allen - 2004-10-13

      It's just that the current implementation is bad. They know it, and say so in the documentation. Basically you can only alias a command, not a command and parameters in the current implementation. IE you can do alias echo write-console, but not alias foo write-console "foo". It sucks. If it weren't for that I'd probably be using msh on a regular basis.

       
    • Marko Bozikovic

      Marko Bozikovic - 2004-10-14

      I'll take a look at the project when I find some time :-) I'm (still) really busy, and unfortunately have no time to work on Console.

      As for console API, Console uses the lowest API provided by Windows (that's documented :) I hope there will be some improvements in Longhorn regarding console apps support. IMHO, Windows could really use a good console...

       
    • Rob Davenport

      Rob Davenport - 2004-10-14

      re: aliases

      ???  Boy, that does suck.  Horribly.
      Without proper aliases it's useless as a daily command environment.  (Unless they have intellisense to do command-line completion... :)   Might be useful for batch type environments - and since that's a big part of what sysadmins use and that's their target audience - not us users, it's understandable, I guess.

      I guess they're working more on the understructure and getting the piping and objects working, rather than on such frivolous things as aliases. 

      Does the shell handle backticking?
      set myvar=`ps -e | grep -i test` 
      (I forget the technical term at the moment.)

       
    • Ken Allen

      Ken Allen - 2004-10-14

      I take it you mean command substitution? It does because it's basically a programming language. You call functions inside of expressions all the time and it's no different in msh.

       

Log in to post a comment.