web-dev-qa-db-ja.com

PowerShellからMsiExecを実行し、リターンコードを取得する

_BAT/CMD_スクリプトを使用すると、単純に_"msiexec /i <whatever.msi> /quiet /norestart"_を使用し、_%errorlevel%_で結果を確認できます。

VBScriptを使用して、_Wscript.Shell_ object Run()メソッドを使用すると、次のような結果が得られます。

_"result = oShell.Run("msiexec /i ...", 1, True)"
_

PowerShellでこれを行うにはどうすればよいですか?

28
Skatterbrainz

これをStart-Processでラップし、結果のプロセスオブジェクトのExitCodeプロパティを使用します。例えば

(Start-Process -FilePath "msiexec.exe" -ArgumentList "<<whatever>>" -Wait -Passthru).ExitCode
50
ravikanth
$LastExitCode

または

$?

あなたが望んでいるものに応じて。前者は整数で、後者は単なるブール値です。さらに、$LastExitCodeは実行中のネイティブプログラムに対してのみ入力されますが、$?は通常、最後のコマンドの実行が成功したかどうかを示します。したがって、コマンドレットにも設定されます。

PS Home:\> cmd /c "echo foo"; $?,$LASTEXITCODE
foo
True
0
PS Home:\> cmd /c "ech foo"; $?,$LASTEXITCODE
'ech' is not recognized as an internal or external command,
operable program or batch file.
False
1
18
Joey

また、いくつかの機能を提供するpowershellアプリ展開キットを使用することもできます。

次に、例えばを使用することができます

Execute-MSI -Action 'Install' -Path "$dirFiles\your.msi" -AddParameters "INSTALLFOLDER=C:\$appFolder"

info http://psappdeploytoolkit.com/

0
Johan A.