Msh Language Quick Start
MSH LANGUAGE QUICK START
Arithmetic Operators (also see Unary and String operators) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||
Array Comparison | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Return all elements equal to 3: 1,2,3,5,3,2 –eq 3 Return all elements less than 3: 1,2,3,5,3,2 –lt 3 Test if 2 exists: if (1, 3, 5 –eq 2) … Other operators: -gt, -le, -ge | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Arrays | ||||||||||||||||||||||||||||||||||||||||||||||||||||
* Arrays are zero-based. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Assignment Operators | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||
Associative Arrays (Hashtables) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||
Boolean Values | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||
break (scripting) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
The "break" commands exits a loop. Example: while (1) { $a = something if ($a –eq 1) break; } | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Command Expansion Operators | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||
Comments | ||||||||||||||||||||||||||||||||||||||||||||||||||||
# This is a comment. $a = "#This is not a comment…" $a = "something" # …but this is. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Comparison Operators | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||
continue (scripting) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
The continue statement continues the next iteration of a loop without breaking out of it. Example: while (1) { $a = something if ($a –eq 1) (continue) # This line is not reached unless $a == 1 } # This line is never reached. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Dot Sourcing | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Dot sourcing allows running functions, script blocks, and scripts in the current scope rather than a local one. Example: . MyFunction If MyFunction sets a variable, it is set in the current scope rather than the function’s local scope. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Escape Character and Escape Sequences | ||||||||||||||||||||||||||||||||||||||||||||||||||||
The MSH escape character is the backwards apostrophe, or `. To make a character literal, precede it with `. To specify a ` use ``.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||
Execution Order | ||||||||||||||||||||||||||||||||||||||||||||||||||||
MSH attempts to resolve commands in the following order: aliases, functions, cmdlets, scripts, executables, normal files | ||||||||||||||||||||||||||||||||||||||||||||||||||||
for (scripting) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
[:label] for ([initializer]; [condition]; [iterator]) {} Example: for ($i = 0; $i –lt 5; %i++) {write-object $i} | ||||||||||||||||||||||||||||||||||||||||||||||||||||
foreach (scripting) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
[:label] foreach (identifier in pipeline or collection) {} Example: $i = 1,2,3 foreach ($z in $i) {write-object $z} | ||||||||||||||||||||||||||||||||||||||||||||||||||||
functions (scripting) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
function MyFunction { write-object $args[0] } | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Filters (scripting) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
filter MyFilter { $_.name } | ||||||||||||||||||||||||||||||||||||||||||||||||||||
if/elseif/else (scripting) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
if (condition) {…} elseif (condition) {…} else {…} On the command-line, the closing brace must be on the same line as elseif and else. This restriction does not exist for scripts | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Invoke Operator | ||||||||||||||||||||||||||||||||||||||||||||||||||||
The & operator can be used to invoke the contents of an object. Example: $a = "get-process" &$a $a = { get-process | pick-head 2 } &$a | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Logical Operators | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||
Method Calls | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Methods can be called on objects. Examples: $a = "This is a string" $a.ToUpper() $a.SubString(0,3) $a.SubString(0,($a.length/2)) $a.Substring(($a.length/2), ($a.length/3)) Static methods may be called as well: [string].format("{0} {1} {2}","one",2,(get-date)) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
MSH Variables | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||
Object Properties | ||||||||||||||||||||||||||||||||||||||||||||||||||||
An object’s properties can be referenced directly with the "." operator. $a = get-date $a.Date $a.TimeOfDay.Hours | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Operator Precedence | ||||||||||||||||||||||||||||||||||||||||||||||||||||
In MSH, operators are evaluated in the following precedence: () {}, \@ $, !, [ ], ., &, ++ --, Unary + -, * / %, Binary + -, Comparison Operators, -and –or, |, > >>, = | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Redirection | ||||||||||||||||||||||||||||||||||||||||||||||||||||
The > and >> operators redirect command output to files. The > operator creates a new file or truncates and existing one, while the >> operator appends to an existing file. Example: 1,2,3 >foo.txt 5,6 >>foo.txt | ||||||||||||||||||||||||||||||||||||||||||||||||||||
return (scripting) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
The return command exits the current script or function and returns a value. Example: function foo { ... } | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Script Blocks | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Commands and expressions can be stored in a script block object and executed later. Example: $block = {get-process; $a=1} &$block | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Scripts | ||||||||||||||||||||||||||||||||||||||||||||||||||||
MSH commands can be stored in and executed from script files. The file extension for MSH scripts is ".msh". Parameters can be passed to a script and a script can return a value. Example: $sum = MyAdder.msh 1 2 3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Strings and String Operators | ||||||||||||||||||||||||||||||||||||||||||||||||||||
String constants: "this is a string, this $variable is expanded" ‘this is a string, this $variable is not expanded’
Examples: MSH> "test" + "this" testthis MSH> "{0:M}" -f $(get-date) June 02 MSH> $a = 1,2,3,4 MSH> $a 1 2 3 4 MSH> $OFS = ":" MSH> "$a" 1:2:3:4 MSH> "This is a test" -replace "is","IS" ThIS IS a test | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Switch | ||||||||||||||||||||||||||||||||||||||||||||||||||||
$a = 3 switch ($a) { 1 {"got one"} 2 {"got two"} 3 {"got three"} } $var = "word2" switch -regex ($var) { "word2" {"Multi-match Exact " + $_ } "word.*" {"Multi-match Exact1 " + $_ } default {"Multi-match Default " + $_; break} "w.*" {"Previous Break terminated the matching"} } $var = "word1","word2","word3" switch -regex ($var) { "word1" {"Multi-match Exact " + $_ ; continue} "word2" {"Multi-match Exact " + $_ ; continue} default {"Multi-match Default " + $_; continue} } | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Trap | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Execute a block of code in a terminating error condition. Example: function handler1 { write-host "Hi, I'm a trap handler" } function handler2 { write-host "Hi, I'm a trap handler2" } trap [System.Management.Automation.ExecutionFailedException] { handler2 ; continue } trap [System.Management.Automation.ExecutionBreakOnErrorException] { handler1 ; continue } get-content thisisabadfilename -errorp notifystop set-location thisisabadlocation | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Types & Casts | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Brackets around a string indicate a type object
| ||||||||||||||||||||||||||||||||||||||||||||||||||||
Unary Operators | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||
Variables | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Format: $[scope:]name Examples: $a = 1 $global:a = 1 $local:a = 1 $env:path = "d:\windows" Scope may be either global, local or script | ||||||||||||||||||||||||||||||||||||||||||||||||||||
while (scripting) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
[:label] while (condition) { … } |
Comments
- Anonymous
February 24, 2005
Does the world really need another scripting language?
And if it did, would it need this one? - Anonymous
February 24, 2005
Yes, I think variety is good; plus this looks like a pretty interesting scripting language and I am looking forward to it.
Great troll though, nicely done. - Anonymous
February 24, 2005
Have VBScript & WSH been formally deprecated in favor of MSH?
Is there anything in MSH that couldn't have been achieved by further development of WSH?
I expect Microsoft to say, "Don't use Python, use our scripting language instead." But it doesn't look good when Microsoft says, "That thing we were talking up last year - don't use that any more. Use this new thing instead."
Microsoft is always telling their customers, "Throw away all the code you've written so far, forget everything you've learned, jump on this year's bandwagon." Next year you'll be talking up something else, and MSH will have been quietly forgotten.
So why bother learning it now? - Anonymous
February 24, 2005
Will you provide a new user interface for MSH as well?
Command Prompt in XP is the worst when compared with any of the *nix variants.
Please tell me that it will :( - Anonymous
February 24, 2005
New Monad blogger - Anonymous
February 24, 2005
Cool...
But we need Monad or MSH before Longhorn.
Please give it to us with .Net 2.0 !!! - Anonymous
March 08, 2005
Hmmm.... interesting but it looks a bit like a mixture of Java + C#, which might scare off the VBers.
I haven't found anything in VBS, WSF, nor WSH that can't be improved to make it work for all my needs.
My opinion, MSH will be DOA. - Anonymous
March 08, 2005
The comment has been removed - Anonymous
June 28, 2005
Nomad is the codename for Microsoft next-generation command lines shell.  It's like a bit like "korn/bash/...... - Anonymous
June 03, 2006
PingBack from http://suniljagadish.wordpress.com/2005/07/10/microsoft-command-shell-monad/ - Anonymous
January 13, 2008
PingBack from http://canlive.net/monad-microsoft-vista-shell-scripting.html - Anonymous
February 09, 2008
PingBack from http://www.etixet.com/monad-microsoft-vista-shell-scripting.html - Anonymous
February 14, 2008
PingBack from http://canlive.net/monad-microsoft-vista-shell-scripting-2.html - Anonymous
May 29, 2009
PingBack from http://paidsurveyshub.info/story.php?title=arul-kumaravel-s-weblog-msh-language-quick-start - Anonymous
June 01, 2009
PingBack from http://indoorgrillsrecipes.info/story.php?id=4731