Advertisment

OOPS with Microsoft Shell

author-image
PCQ Bureau
New Update

Last month, we looked at the upcoming command shell from Microsoft called MSH (Microsoft Shell). It allows power users to utilize their machines and create new ways of managing the system better. Unlike other shells such as the DOS prompt or the Linux BASH prompt which uses procedural logic in any scripting, MSH uses a different methodology. Being built on managed code (read .NET), MSH uses a completely object-oriented philosophy as its base. Microsoft has invented a new language for scripting MSH. It uses a combination of familiar shell programming constructs from other standard shells as well as uses the OO concepts that are now inherent in this shell. MSH also has a concept of CmdLets (pronounced Command-Lets), equivalents of small commands, which can be combined to do more tasks. Let's look at how the new shell works. Every shell has a way to create variables that can be used in different ways. MSH follows the same idea. Here are some ways you can create different types of variables in
MSH.

Advertisment

MSH> $string = “Hello World”

MSH> $number = 3.141

MSH> $normalarray = 10,9,8,7,6,5

MSH> $associativerray = @{no = 0; yes = 1; maybe = 100}

MSH> echo $string

Hello World

MSH> echo $number

3.141

MSH> echo $normalarray

10

9

8

7

6

5

MSH> echo $associativearray

Key Value

--- -----

no 0

yes 1

maybe 100

Direct
Hit!
Applies to: System administrators, power users and developers
USP: Insight into object-oriented shell scripting using the .NET framework
Primary Link: msdn.microsoft.com
Google keywords: Monad, MSH, CmdLet
Advertisment

Normal operation such as +,-,/,*,+=,-=,/=,*= are all allowed amongst variables. Of course, there are rules as to what will happen depending on the variables involved. However, the interesting part comes when you can start assigning data types to the variables. For instance, you can specify a set of different MSH data types as well as standard .NET types to the variables.

MSH> $number = 10

MSH> $contact = “VinodGurgaon

MSH> $independenceday = “08/15/1947”

MSH> $newyear = New-Object System.DateTime 2006,1,1

Since all variables in MSH are actually objects, normal variable value substitution becomes even more powerful than before. Take a look at the difference in the two examples below.

Advertisment

MSH> $folder = “C:\Windows”

MSH> dir $folder

Directory: FileSystem::C:\Windows

Mode LastWriteTime Length Name

---- ------------- ------ ----

-a--- Apr 05 2004 64512 agrsmdel.exe

-a--- Oct 28 15:37 88363 agrsmmsg.exe

-a--- Aug 04 05:00 1272 Blue Lace 16.bmp

...



MSH> $process = Get-Process Notepad

MSH> echo $process.Name

Notepad.exe

In the second example, the variable '$process' is an object that contains different properties-one of them being 'Name'. 

You can also access methods of the objects in MSH in the same manner. For instance, take a look at the examples that follow.

Advertisment

MSH> $str = “My name is Anthony Gonzalves”

MSH> echo $str.SubString(11, 3)

Ant

MSH> echo $str.ToUpper()

MY NAME IS ANTHONY GONZALVES

MSH> echo $str.StartsWith(“Test”)

False

MSH> echo $str.StartsWith(“My”)

True

MSH> echo $str.Split(“ ”)

My

name

is

Anthony

Gonzalves

You can even call static methods on the data type by prepending the method with '::'. For instance,

MSH> ::Compare(“TEST”, “NEST”)

-1

MSH> ::Today

08/17/2005

Advertisment

Finally, you can create functions that let you perform a particular task in the following manner. These functions can be written at the command line (valid for that session) or put within an .MSH file (like a .sh or .bat file).

MSH> function percentage { 

>> $value = $args<0> * 100 / $args<1>

>> $result = “The percentage is: “ + $value + “%”

>> }

MSH> percentage 50 100

The percentage is: 50%

You can also specify the parameters that a function should have, with their data type and their optional defaults. For instance,

Advertisment

MSH> function area {

>> param ( $length = 0, $width = 0, $height = 0)

>> $result = $length * $width * $height 

>> “The area is: ” + $result.ToString()}

MSH> area

The area is: 0

MSH> area 5, 10, 15

The area is: 750

Thus, an object oriented powerful programming model for the new MSH lets you create scripts and functions that can work with the entire .NET object model at the command line itself. It is surmised that this new shell will be released for Win XP and higher after the release of Windows Vista. It will also be one of the new remote-management options for the next version of MS Exchange.

Vinod Unny, Enterprise Infotech

Advertisment

Stay connected with us through our social media channels for the latest updates and news!

Follow us: