PowerShellで外部のプログラムを実行する方法は、Start-ProcessやInvoke-Expression等いろいろ有るようですが、最もバッチファイル(*.BAT)っぽくシンプル・大きく異ならない書き方はどうなるかなと。
以下は実行するJavaプログラムです。コンパイル済みの物をJarにし、javaコマンドで実行します。引数の指定が有る場合は正常終了、引数の指定がない場合は異常終了します。
package jp.mo.ur.external; public class ExternalCommand { public static void main(String[] args) { if (args.length < 1) { System.err.println("引数指定なし"); System.exit(1); } System.out.println("処理A" + args[0]); System.exit(0); } }
外部コマンドを実行する、引数に変数を使う、終了コード(コマンドプロンプトで言う所の%ERRORLEVEL%)を取得、エラーなら終了、という処理がこうなりました。
$CLASSPATH = "F:\uraku\Desktop\ec.jar" $PACKAGE = "jp.mo.ur.external." echo "Javaプログラム実行1" &java -cp $CLASSPATH ($PACKAGE + "ExternalCommand") "hoge" echo ("終了コードは" + $LASTEXITCODE) if ($LASTEXITCODE -ne 0) { exit } echo "Javaプログラム実行2" &java "-cp" $CLASSPATH ($PACKAGE + "ExternalCommand") echo ("終了コードは" + $LASTEXITCODE)
とりあえず目的が果たせました。
ここでコマンドプロンプトでの実行と異なるのは、「発生場所」以降に表示されるエラー内容。コマンドプロンプト上では表示されません。これが不要な場合は……。