#はじめに
Qiitaに初投稿。
少し前にいじった時の情報ですが、確認したら結果が変わらなかったので備忘録としてメモしておこうかと思います。
現在、作成していた環境が丸々消失したのでコードなどもあまり書けてないのはすみません。
###何の話か
Javaから外部のexeやスクリプトなどを実行する「ProcessBuilder」クラスを用いて、
Microsoftから公開されている「PsTools」を直接実行したらなんか処理が返ってこなかった。
PsToolsについては以下参照
PsTools - TechNet - Microsoft
#使用言語・環境
Java 8
Eclipse4.4 Luna
Apache Tomcat8.5
Windows10
#経緯
とあるJavaプロジェクトを検証環境に配置して実行できる状態にするまで自動化したくて作成。
リモート環境にJavaプログラムのzipファイルをコピーする処理の実装に利用。
#処理方法と結果
ProcessBuilderインスタンスから直接実行
共有フォルダから検証環境にzipファイルをコピーで配置の処理をEclipseから実行
psexec \\コピー先ホスト名 -u コピー先ドメイン\コピー先ユーザー -p コピー先pass xcopy "\\共有server\Path\JavaProject1.zip" "C:\Users\コピー先ユーザー\Path\コピー先フォルダ"
Eclipseのコンソール上に逐一情報が表示されるが、Psexecがリモート先に接続した状態で終わってしまう。
しかしファイルはコピーされていた。このままでは後続処理ができない。
解決方法
.batファイルにpsexecのコマンドを実行させて、Javaからはその.batファイルを呼び出す形にしたら返ってきた。
#まとめ
原因はわからないままで申し訳ないですが、ProcessBuilderではpsexecの返り値を識別できなかったっぽいです。
なので.batに記載してその中で返り値含めて記述することで解決しました。