2010-01-17 69 views
34

如何在PowerShell中运行可执行文件并通过if语句确定它是成功还是失败?从PowerShell调用exe并获得成功或失败的反馈

更具体地说,我试图让devenv.exe从PowerShell脚本构建解决方案,我需要知道它是成功还是失败。通过失败了,我的意思是构建已经失败,我假设devenv的是出来送点东西给壳(中stderr流中可能?)

我试着用&Invoke-ExpressionInvoke-Item,并设法让所有的人运行exe。但我从来没有能够获得成功/失败的反馈。

+0

是否有一个理由,为什么你不使用msbuild.exe来构建解决方案,而不是devenv.exe的? – Filburt 2010-01-17 19:19:29

+1

唯一的原因是我不够精通使用msbuild。我确实有一台构建机器构建我的解决方案,但我不知道如何重用本地机器的构建定义:| – urig 2010-01-17 20:55:09

+3

如果您想试试这里,请参考如何使用msbuild构建解决方案:http://msdn.microsoft.com/en-us/library/z7f65y0d.aspx – Filburt 2010-01-18 12:04:54

回答

59

您是否尝试过使用$LASTEXITCODE变量?它将包含被调用的最后一个.exe的退出代码。

+2

这个技巧。 $ lastexitcode -eq 0成功时为1,当构建失败时为1。 :) – urig 2010-01-18 17:23:13

+0

不起作用。变量是空的。 – 2017-04-27 14:15:07

+0

交互式地工作。但是,我想让提示表明最后一条命令是否成功; '$ LastExitCode'仅在运行可执行文件时发生变化,因为函数和CmdLets没有“退出代码”。提示中的内容可能会引起误解,因为我无法判断退出代码是否来自上次声明。我希望CmdLets总是重置这个变量。 – 2018-01-19 14:51:40

2
.\YOUREXE.exe 
if($LASTEXITCODE eq 0) 
{ 
    Write-Host "The last PS command executed successfully" 
} 
else 
{ 
    Write-Host "The last PS command failed" 
}