将错误代码从CMD返回给Powershell

Cal*_*res 6 powershell cmd

我正在研究Mssql安装脚本,我想获得静默mssql安装的结果.在我的PowerShell脚本中,我运行此命令:

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

哪个应该在失败时返回0,在传递时返回1.不幸的是,我没有得到任何输出.有任何想法吗?

And*_*ndi 8

另一种方法Start-Process是语法更简洁的调用操作符&.

& cmd.exe /c 'ping.exe doesnotexist && exit 0 || exit 1'
Run Code Online (Sandbox Code Playgroud)

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

Write-Host $LASTEXITCODE
Run Code Online (Sandbox Code Playgroud)

这将包含程序运行的退出代码,因此您无需使用CMD.exe运行它:

& ping.exe doesnotexist ; Write-Host $LASTEXITCODE
Run Code Online (Sandbox Code Playgroud)

应用于您的命令行程序:

& cmd.exe /c 'D:\SQL2008R2\SQL2008R2\setup.exe /CONFIGURATIONFILE=sqlconfig.ini && exit 0 || exit 1'
Run Code Online (Sandbox Code Playgroud)

要不就:

& D:\SQL2008R2\SQL2008R2\setup.exe /CONFIGURATIONFILE=sqlconfig.ini
Run Code Online (Sandbox Code Playgroud)

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


Cal*_*res 2

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

(Start-Process -FilePath "cmd.exe /c ..." -Wait -Passthru).ExitCode
Run Code Online (Sandbox Code Playgroud)

太简单!