我在代码项目中使用powershell异步执行代码在C#中执行了一个scipt:
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
我需要返回$lastexitcode,Jean-Paul描述了如何使用自定义的pshost类来返回它。我在pshost中找不到任何返回退出代码的方法或属性。
我的这个引擎需要确保脚本正确执行。
任何帮助都将不胜感激。
向鲍勃致敬。
是$lastexitcode和$吗?我需要带回来的变量。
“嗨,”我终于回答了。
我发现了$host变量。它实现了对主机的回调,特别是自定义PSHost对象,使您能够返回$lastexitcode。这里有一个指向$host解释的链接。
http://mshforfun.blogspot.com/2006/08/do-you-know-there-is-host-variable.html
它似乎晦涩难懂,文档也很糟糕,就像powershell文档一样。使用第4点,调用$host.SetShouldExit(1)将1返回给pshost的SetShouldExit方法,如下所述。
http://msdn.microsoft.com/en-us/library/system.management.automation.host.pshost.setshouldexit(VS.85).aspx
这实际上取决于定义您自己的退出代码定义。我猜是0和1后缀。
向鲍勃致敬。
发布于 2009-04-23 02:08:17
下面是一个你可以尝试的函数:
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
}希望这能有所帮助
发布于 2009-04-19 21:22:44
您可以在脚本代码中编写将检查$lastexitcode的代码,如果退出代码不是您所期望的,则将执行throw an exception。
异常更容易捕获。
发布于 2010-03-22 08:53:50
我相信你使用这个代码项目是小题大做。在C#中,异步执行非常容易。
PowerShell psCmd = PowerShell.Create().AddScript({Invoke-YourScriptAndReturnLastExitCode});
IAsyncResult result = psCmd.BeginInvoke();
// wait for finish
psCmd.EndInvoke(result);另外,看看你在这个项目上的问题,看起来你正在尝试在PowerShell中使用TFS。您可以考虑以下附加信息:
希望这能有所帮助
https://stackoverflow.com/questions/765816
复制相似问题