Did your command or script fail and/or report an error? We hope to have a proper script debugger in a future version, but until then, MSH has some handy features to help you figure out what went wrong. In this series of blog entries, I will present some of those features. Thanks to Jim Truher [MSFT], Bruce Payette [MSFT], and Jeff Jones [MSFT] for their help in putting this together.
See the Windows "Monad" Shell Beta 2 Documentation Pack (http://www.microsoft.com/downloads/details.aspx?FamilyID=8a3c71d1-18e5-49d7-952a-c55d694ecee3&displaylang=en) for general information about Monad.
Part 1: http://blogs.msdn.com/monad/archive/2005/11/04/489138.aspx (Terminating vs. Non-Terminating Errors, ErrorRecord)
Jon Newman [MSFT]
Errors occurring in MSH commands or scripts will be stored in $error. $error is always on, so you can use it even for errors which you can't reproduce (or would rather not repeat).
$error is an ArrayList containing the most recent errors: $error is the most recent error, $error the one before that, etc. $MaximumErrorCount (default 256) is the maximum number of errors which will be stored before the oldest is discarded.
So, when you see errors, you should have a look at $error. Note that any new error will move $error to $error, so you'll probably want to copy $error to another shell variable before investigating it, e.g.
MSH C:\temp> start-service $servicenamestart-service : Cannot bind argument to parameter 'ServiceName' because it is null.At line:1 char:14+ start-service <<<< $servicenameMSH C:\temp> $savethis = $errorMSH C:\temp> $savethis.GetType().NameErrorRecordMSH C:\temp> $savethis.InvocationInfo.MyCommand
CommandType Name Definition----------- ---- ----------Cmdlet start-service start-service [-ServiceName] String [-PassThru...
Note that Exception objects will in some cases also appear in $error. In particular, the "throw" script command may add both an ErrorRecord and a RuntimeException to $error.