首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从c# powershell脚本执行中提取$lastexitcode

如何从c# powershell脚本执行中提取$lastexitcode
EN

Stack Overflow用户
提问于 2009-04-19 18:10:37
回答 3查看 6.5K关注 0票数 5

我在代码项目中使用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后缀。

向鲍勃致敬。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-04-23 02:08:17

下面是一个你可以尝试的函数:

代码语言:javascript
复制
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
}

希望这能有所帮助

票数 4
EN

Stack Overflow用户

发布于 2009-04-19 21:22:44

您可以在脚本代码中编写将检查$lastexitcode的代码,如果退出代码不是您所期望的,则将执行throw an exception

异常更容易捕获。

票数 1
EN

Stack Overflow用户

发布于 2010-03-22 08:53:50

我相信你使用这个代码项目是小题大做。在C#中,异步执行非常容易。

代码语言:javascript
复制
PowerShell psCmd = PowerShell.Create().AddScript({Invoke-YourScriptAndReturnLastExitCode});
IAsyncResult result = psCmd.BeginInvoke();
// wait for finish
psCmd.EndInvoke(result);

另外,看看你在这个项目上的问题,看起来你正在尝试在PowerShell中使用TFS。您可以考虑以下附加信息:

  1. TFS has cmdlets cmdlet许多其他人都使用过TFS cmdlet,即PSTFS
  2. You总是可以将tfs可执行文件复制到您需要的任何地方,这至少可以避开您的部分脚本痛苦。

希望这能有所帮助

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/765816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档