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)Part 2: http://blogs.msdn.com/monad/archive/2005/11/08/490130.aspx ($error)Part 3: http://blogs.msdn.com/monad/archive/2005/11/09/490625.aspx (write-host)Part 4: http://blogs.msdn.com/monad/archive/2005/11/09/491035.aspx (set-mshdebug)Part 5: http://blogs.msdn.com/monad/archive/2005/11/11/491967.aspx (Preferences and Commandline Options)
Jon Newman [MSFT]
Trace-Expression: Using Tracing
Breakpoint Script
Jeff Jones [MSFT] proposes the following scriptlet for creating breakpoints in Monad scripts:
function start-debug{ $scriptName = $MyInvocation.ScriptName function prompt { "Debugging [{0}]>" -f $(if ([String]::IsNullOrEmpty($scriptName)) { "globalscope" } else { $scriptName } ) } $host.EnterNestedPrompt()}set-alias bp start-debug
You can dot-source these in your profile or add them directly to your script, then set a breakpoint by inserting "bp" in the script. When this line is hit it puts you into a nested prompt with a modified prompt that tells you what you are debugging. You can examine variables, functions, etc, and when you are done you type "exit" and the script starts running again. This is great when you have a long script and you don't want to step through the whole thing using set-mshdebug -Step.