Windowsでリモートコマンド実行 PsExec
Windows Serverでリモートコマンドを実行する必要があって、「サーバなんだから簡単にできるだろう」と思っていたら、結構手こずりました。
忘れない内に、簡単にメモ。
今回、実現したかったのは、以下の条件を満たすリモート処理。
- WindowsServer間で実行
- リモートのマシンで実行ユーザを指定可能
- ASP.NETから実行
- 同期実行
検討 or 検証したのは、以下の方法。
AT or SCHTASKS コマンド
- 概要
- タスクスケジューラに登録して、コマンドを実行する。
- 結果:×
- 非同期にしかできないため、不採用。
WinRM 2.0 + PowerShell 2.0
- 概要
- SOAPベースの通信で、リモートでコマンドを実行する。
- Windows2008には標準でインストールされているが、Windows2003Serverの場合は、以下からダウンロードしてインストールすれば利用できる。
- 結果:×
PsExec
- 概要
- PsToolsというプロセス関連のユーティリティのひとつ。プロセスをリモートで実行できる。
- リモートで実行するコマンド(batファイルなど)を、リモートにコピーすることもできる。
- 結果:△
PsExecの制限は、解決できず・・・
誰か、解決方法知りませんか?
その他、WSH(+WMI)で自前で実装することも考えたが、開発の時間もないため、PsExecを採用することにした。
(2010/06/18 追記)
PsExec
- 概要
- PsToolsというプロセス関連のユーティリティのひとつ。プロセスをリモートで実行できる。
- リモートで実行するコマンド(batファイルなど)を、リモートにコピーすることもできる。
- 結果:○
PsExecを利用すると、やりたい処理が実現できました!
*1:「プログラムを実行して、リモート システムの指定したセッションのデスクトップと対話するようにします。セッションを指定しないと、プロセスはコンソール セッションで実行されます。」はじめ、ヘルプを読んだだけでは、分からなかったけど、試してみたらうまくいった