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)
とりあえず目的が果たせました。
ここでコマンドプロンプトでの実行と異なるのは、「発生場所」以降に表示されるエラー内容。コマンドプロンプト上では表示されません。これが不要な場合は……。
