6

我正在处理 Mssql 安装脚本,我想获得静默 mssql 安装的结果。在我的 PowerShell 脚本中,我运行以下命令:

$result = (start cmd "/c D:\SQL2008R2\SQL2008R2\setup.exe /CONFIGURATIONFILE=sqlconfig.ini && exit 0 || exit 1")

失败时应返回 0,通过时应返回 1。不幸的是,我没有得到任何输出。有任何想法吗?

4

3 回答 3

10

一个替代方法Start-Process是语法上更简洁的调用操作符&

& cmd.exe /c 'ping.exe doesnotexist && exit 0 || exit 1'

退出代码将包含在内置变量中$LASTEXITCODE,因此:

Write-Host $LASTEXITCODE

这将包含程序运行的退出代码,因此您不必使用 CMD.exe 运行它,您可以这样做:

& ping.exe doesnotexist ; Write-Host $LASTEXITCODE

应用于您的命令行程序:

& cmd.exe /c 'D:\SQL2008R2\SQL2008R2\setup.exe /CONFIGURATIONFILE=sqlconfig.ini && exit 0 || exit 1'

要不就:

& D:\SQL2008R2\SQL2008R2\setup.exe /CONFIGURATIONFILE=sqlconfig.ini

在这两种情况下$LASTEXITCODE都应该为 0 表示成功,否则为非零(如果外部程序编写正确)。

于 2012-06-12T23:53:16.957 回答
2

这就是你的做法:start实际上是一个 alias Start-Process,所以你必须查看它的文档,这与 cmd.exe 的 有很大不同start。所以你可以这样做:

(Start-Process -FilePath "cmd.exe /c ..." -Wait -Passthru).ExitCode

太简单!

于 2012-06-12T20:55:11.413 回答
0

也许为时已晚,但这有帮助吗?

start /WAIT cmd.exe /C "YOUR-COMMAND-HERE" & if errorlevel 1 echo 'error occurred'

您还可以显式返回如下错误代码:

start /WAIT cmd.exe /C "YOUR-COMMAND-HERE & exit MY-ERROR-CODE" & if errorlevel 1 echo 'error occurred'
于 2014-06-26T03:21:36.077 回答