月別アーカイブ: 2014年4月

PowerShellでJavaプログラムを実行し戻り値を得る

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)

実行結果です。アホ毛。
ps_result1

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