PowerShell で Java バージョンを取得しようとしています。バージョン文字列はstderrに出力されるため、それを stdout にリダイレクトして文字列変数に割り当てようとしています。
次の奇妙なエラーが表示されます。
PS P:\> & java -version 2>&1
java.exe : java version "1.7.0_25"
At line:1 char:2
+ & <<<< java -version 2>&1
+ CategoryInfo : NotSpecified: (java version "1.7.0_25":String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
Java(TM) SE Runtime Environment (build 1.7.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)
リダイレクトなしの呼び出し (2>&1) では、次のようになります。
PS P:\> & java -version
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)
ここでのJavaは無関係だと思います.stderrに文字列を出力する他のプログラムでも同じことが起こります。
私が使用する PowerShell のバージョンは2.0です。
質問:
- stderr を変数にリダイレクトするにはどうすればよいですか?
- あるいは、インストールされている Java のバージョンを確認するにはどうすればよいですか?
回避策
次のように実行できます。
$output = & cmd /c "java -version 2>&1"
しかし、必要のない場所で cmd.exe を実行するのは嫌いです。