Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Returning an error code from CMD to Powershell

Tags:

powershell

cmd

I'm working on a Mssql install script and I want to get the results of a silent mssql installation. In my PowerShell script I run this command:

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

Which should return 0 on fail and 1 on pass. Unfortunately, I don't get any output back. Any ideas?

like image 422
Caleb Jares Avatar asked Jun 12 '12 20:06

Caleb Jares


2 Answers

An alternative to Start-Process is the more syntactically terse call operator &.

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

The exit code will be contained in the built-in variable $LASTEXITCODE so:

Write-Host $LASTEXITCODE

This will contain the exit code of the program run so you don't necessary have to run it with CMD.exe you could just do:

& ping.exe doesnotexist ; Write-Host $LASTEXITCODE

Applied to your command line program:

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

Or just:

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

In both cases $LASTEXITCODE should be 0 for success, non-zero otherwise (if the external program was written correctly).

like image 198
Andy Arismendi Avatar answered Nov 15 '22 06:11

Andy Arismendi


This is how you do it: start is actually an alias Start-Process, so you have to look at it's documentation, which is a lot different than cmd.exe's start. So you can do this:

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

So easy!

like image 44
Caleb Jares Avatar answered Nov 15 '22 05:11

Caleb Jares