2012-06-12 17 views
6

私はMssqlインストールスクリプトで作業しています。サイレントmssqlインストールの結果を得たいと思います。私のPowerShellスクリプトでは、次のコマンドを実行します。CMDからPowershellへのエラーコードの返信

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

失敗した場合は0を返し、1回失敗した場合は0を返します。残念ながら、私は出力を戻すことはありません。何か案は?

+0

これは、 '&&は'どのように動作するかではなく、あなたが '後の出口0 'または'終了を1 'を選択することはできません:あなたはまた、明示的にこのようなエラーコードを返すことができ

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

セットアップが実行されます。 'ERRORLEVEL'をテストする必要があります。これは通常、バッチファイルで行われ、バッチファイルは適切なエラーコードで終了することができます。 –

+0

さて、それは実際にそのように動作します。 '&&'は左側を実行し、falseの場合(コマンドが失敗した場合)、 '&&'の右側を実行します。演算子優先順位グループ '(Left && Middle)||右。これを考えると、 '||'が条件付きか真の値までしか動かなければ、実際には '||'の代わりに '&'を使っていたはずです。 –

答えて

2

これは、あなたがそれを行う方法です:startは実際には別名Start-Processあるので、あなたはそれがcmd.exeののstartより多くの異なるドキュメント、だを見ています。あなたはこれを行うことができます:

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

とても簡単です!

+0

これは、単にパイプラインに書き込むことに留意してください。それをStdOutにエコーする場合は、Write-Hostコマンドレットを使用します。 –

+0

これは偽陽性でした。 PowerShellのセッションで両方を試していたので、これは私のために働いていました。コマンドプロンプトは何も返されません。 –

8

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、非ゼロでなければなりません。

+0

ええ、私はあなたもそうすることができると思っていましたが、私は私が新しいウィンドウにいたかったので、私は 'Start-Process' –

0

これはあまりにも遅いかもしれませんが、これは役に立ちますか?

start /WAIT cmd.exe /C "YOUR-COMMAND-HERE & exit MY-ERROR-CODE" & if errorlevel 1 echo 'error occurred' 
関連する問題