I've got a scipt executing in C# using the powershell async execution code on code project here:
http://www.codeproject.com/KB/threads/AsyncPowerShell.aspx?display=PrintAll&fid=407636&df=90&mpp=25&noise=3&sort=Position&view=Quick&select=2130851#xx2130851xx
I need to return the $lastexitcode and Jean-Paul describes how you can use a custom pshost class to return it. I can't find any method or property in pshost that returns the exit code.
This engine I have needs to ensure that script executes correctly.
Any help would be appreciated.
regards Bob.
Its the $lastexitcode and the $? variables I need to bring back.
Hi,
Finally answered.
I found out about the $host variable. It implements a callback into the host, specifically a custom PSHost object, enabling you to return the $lastexitcode. Here is a link to an explanation of $host.
http://mshforfun.blogspot.com/2006/08/do-you-know-there-is-host-variable.html
It seems to be obscure, badly documented, as usual with powershell docs. Using point 4, calling $host.SetShouldExit(1) returns 1 to the SetShouldExit method of pshost, as described here.
http://msdn.microsoft.com/en-us/library/system.management.automation.host.pshost.setshouldexit(VS.85).aspx
Its really depends on defining your own exit code defintion. 0 and 1 suffixes I guess.
regards Bob.
Here is a function you can try:
function run-process ($cmd, $params) {
$p = new-object System.Diagnostics.Process
$p.StartInfo = new-object System.Diagnostics.ProcessStartInfo
$exitcode = $false
$p.StartInfo.FileName = $cmd
$p.StartInfo.Arguments = $params
$p.StartInfo.UseShellExecute = $shell
$p.StartInfo.WindowStyle = 1; #hidden. Comment out this line to show output in separate console
$null = $p.Start()
$p.WaitForExit()
$exitcode = $p.ExitCode
$p.Dispose()
return $exitcode
}
Hope that helps
You can write in your script code that will check the $lastexitcode and will throw an exception if the exitcode is not what you excepted.
Exceptions are easier to catch.
I believe you are making a mountain out of a molehill by using this code project. Asynchronous execution is very easy to do in C#.
PowerShell psCmd = PowerShell.Create().AddScript({Invoke-YourScriptAndReturnLastExitCode});
IAsyncResult result = psCmd.BeginInvoke();
// wait for finish
psCmd.EndInvoke(result);
Also, looking at your question on that project, it looks like you are trying to use TFS in PowerShell. You can consider the following additional pieces of information:
Hope this helps
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With