トップ回答者
Invoke-Expressionで実行コマンドの戻り値を取得したい

質問
-
backuptool.exeをいうファイルを変数$bkにオプション設定こみで文字列でコマンドラインを作成。
その後、Invoke-Expression $bkを実行し、backuptool.exeが実行され処理完了後、exeが成功(0)・失敗(1)の戻り値を返します。
その戻り値を取得し、成功・失敗のIF判断処理をしようとしていますが、戻り値を取得することが出来ません。
そのまま実行すると実行している最中に次の処理に流れてしまいIF判断をすることが出来ません。
($lastexitcodeでは0になっている)
この実行結果の戻り値を取得する方法はありますでしょうか。
実行シェル簡単例(test1.ps1)
#実行ファイル
$a=""`C:\Proguram Files\backuptool\backuptool.exe`""
#実行ファイルオプション
$b="`-s -b D:\backup`""
#実行コマンドラインの文字列作成
$bk=$a + $b
#バックアップ実行
Invoke-Expression=$bk
#ここでバックアップ実行完了後の戻り値を取得したい
if($lastexitcode)では、バックアップの処理中なのに0になってしまい成功・失敗判断が出来ない。
backuptool.exeの処理完了後、戻り値を取得してIF判断をして、次の処理へ流れるようにしたい。
回答
-
クオートや = の使い方がおかしいきがしますが・・・
Invoke-Expression $bk ではなく &$a $b にすればよいのではないでしょうか?
追記:
invoke-expression だとスコープが違うのかと思いましたが、そんなことはないですね。
バックアップというのがコマンドではなく、Windows アプリなのかな?と思いますが、Windows アプリの待機は Process コマンドレットを使って Start-Process $a $b -Wait で可能です。
# $a というアプリを引数 $b で実行し、終了するまで待機 $p = Start-Process $a $b -PassThru -Wait # 終了コードの取得 $p.ExitCode # リソースの破棄 $p.Close()
- 編集済み K. Takaoka 2012年5月11日 1:02
- 回答としてマーク atorasu 2012年5月12日 17:27
-
Windows PowerShell スクリプトからアプリケーションを起動した後、アプリケーションが終了するまでスクリプトを一時停止する方法はありますかで説明されていますが、プロセスを起動し、その終了を待ったり実行結果を得るには、Processクラスを使うそうです。
- 回答としてマーク atorasu 2012年5月12日 17:27
すべての返信
-
クオートや = の使い方がおかしいきがしますが・・・
Invoke-Expression $bk ではなく &$a $b にすればよいのではないでしょうか?
追記:
invoke-expression だとスコープが違うのかと思いましたが、そんなことはないですね。
バックアップというのがコマンドではなく、Windows アプリなのかな?と思いますが、Windows アプリの待機は Process コマンドレットを使って Start-Process $a $b -Wait で可能です。
# $a というアプリを引数 $b で実行し、終了するまで待機 $p = Start-Process $a $b -PassThru -Wait # 終了コードの取得 $p.ExitCode # リソースの破棄 $p.Close()
- 編集済み K. Takaoka 2012年5月11日 1:02
- 回答としてマーク atorasu 2012年5月12日 17:27
-
Windows PowerShell スクリプトからアプリケーションを起動した後、アプリケーションが終了するまでスクリプトを一時停止する方法はありますかで説明されていますが、プロセスを起動し、その終了を待ったり実行結果を得るには、Processクラスを使うそうです。
- 回答としてマーク atorasu 2012年5月12日 17:27