[System Environment] | ||||||||||||||
リモート・コンピュータ上でプログラムを実行する(PsExec編)
|
||||||||||||||
|
解説 |
コンピュータを管理・運用していると、管理対象コンピュータの設定を確認したり、設定を変更したりするのに、ちょっとしたプログラムをリモートで実行したくなることがある。例えば、コンピュータのIPアドレスを確認したい場合、いちいちコンソールまで赴いてログオンしてipconfigコマンドを実行するのはあまりにも面倒だ。ネットワークを介してリモート・コンピュータに接続してから、そこで直接ipconfigコマンドを実行し、その結果を管理用コンピュータに集めるところまで自動的に実行したい。このような場合、UNIXやLinuxではrshやrexecなどのリモート実行コマンドがよく利用されるが、Windows OSにはこれらと同じ機能の標準コマンドは用意されていない。
|
Windows OSには標準で、リモート・コンピュータ上でプログラムを実行する手段がいくつか備えられている。例えばリモート・デスクトップは、リモート・コンピュータで有効化しておけば、容易にそのデスクトップをローカル・コンピュータから利用できる便利な機能だ。しかし、前述の例のようにipconfigコマンドの出力が欲しいといった場合、リモート・デスクトップの機能は少々冗長で、処理の自動化も面倒だ。コマンドの実行結果が欲しいだけなのに、いちいちログオンして操作しなければならない。RemoteAppやタスク・スケジューラという手段もあるが、事前に設定やタスク作成などが必要なので、あまり手軽とはいえない(RemoteAppについては関連記事参照)。
|
こうした場合に役立つツールとして、本稿では、Windows Sysinternalsで配布されている「PsExec」を使って、リモート・コンピュータ上でプログラムを容易に実行する手順を説明する(Sysinternalsについては関連記事参照)。Windows標準ではないがマイクロソフト純正の無償ツールであり、インストールの手間もほとんど要らず、事前の設定も最小限で済む。GUIベースのプログラムには適さないが、コマンドライン・プログラムであれば、ローカルで実行するのとほとんど変わらない感覚で利用できる。
操作方法 |
PsExecの入手
PsExecは次のWebページからダウンロードできる。
- Windows SysinternalsのPsExecのページ(マイクロソフト TechNet)
このページの真ん中の段の上部にある「PsToolsのダウンロード」というリンクをクリックすると、PSTools.zipというZIPファイルがダウンロードされる。PsExecを実行したい管理用コンピュータで、このZIPファイルからPsExec.exeというファイルを展開・保存する。この際、ウイルス対策ソフトウェアによっては、ウイルスの感染を警告することがある。これは、PsToolsを悪用したウイルスがあるためだ。警告が出た際は、十分に内容を確認したうえで、展開してほしい。
これでPsExecを実行できるようになる(インストーラはない)。なお、PsExecの初回起動時のみ、使用許諾(PsExec License Agreement)のダイアログが表示されるので、内容を読んで[Agree]ボタンをクリックする。
リモート・コンピュータの準備
PsExecを起動する管理用コンピュータ(ローカル・コンピュータ)と、プログラムを実行したいリモート・コンピュータとの間にファイアウォールがある場合、リモート・コンピュータの受信において、次の通信ポートを開放する必要がある。
- 135/tcp(RPCエンドポイント・マッパー)
- 445/tcp(ダイレクト・ホスティングSMB)
- 1025〜65535/tcp(RPC動的ポート)
このうちRPC動的ポートは、%SystemRoot%\system32\services.exeに対して開放する必要がある。
|
Windows XP/Windows Server 2003のWindowsファイアウォールの場合は、例外ルールの「ファイルとプリンタの共有」を許可する設定をすればよい。Windows 7/Windows Server 2008 R2などの「セキュリティが強化された Windows ファイアウォール」の場合は、[受信の規則]で[グループ]が「リモート サービス管理」である項目をすべて有効化する。
|
また筆者が試した限りでは、リモート・コンピュータでユーザー・アカウント制御(UAC)が有効な場合、psexec実行時にアクセス拒否エラーが発生することがあった。その場合はUACを無効化する必要がある。
上記のほかには、例えばpsexec用サービスを用意するといったリモート・コンピュータ側での準備は必要ない。
PsExecの基本的な使い方
詳しくは後述するが、PsExecを使うには、リモート・コンピュータの管理者権限が必要になる。ここでは話を簡単にするために、リモート・コンピュータにて管理者権限を持つアカウントでローカル・コンピュータにログオンしてPsExecを起動するものとする。
PsExecはコマンドライン・プログラムなので、コマンド・プロンプトを開いて、次のようにコマンドラインを入力・実行する。
psexec \\<コンピュータ名> <リモートでのコマンドライン> |
<コンピュータ名>で指定したリモート・コンピュータ上で、<リモートでのコマンドライン>が実行される。このとき、<リモートでのコマンドライン>には、リモート・コンピュータ上に存在するプログラム(実行ファイル)を指定する。検索パス(PATH環境変数)に含まれるプログラムの場合は、単に実行ファイル名を指定するだけで実行できる。検索パスに含まれない場合は、リモート・コンピュータ上でのプログラムの場所をフル・パスで指定する必要がある。
例えば、server1というリモート・コンピュータでipconfigコマンドを実行したい場合は、次のようにPsExecを実行する。
|
|||||||||
リモート・コンピュータ「server1」でipconfigコマンドを実行した例 | |||||||||
PsExecによって、server1上でipconfigコマンドが実行され、その結果がローカル・コンピュータに表示されたところ。 | |||||||||
|
PsExecによって実行されたコマンドの出力は、リモート・コンピュータからローカル・コンピュータに転送され、標準出力にリダイレクトされる(上記の)。一方、バージョンやコピーライトといったPsExec自身によるメッセージは標準エラー出力に出力される。そのため、PsExecの標準出力をリダイレクトすると、リモートで実行したプログラムの出力だけをファイルに保存できる。
なお、PsExecはグラフィカルな出力をローカルに転送できないため、GUIベースのプログラムをPsExecで起動すると、入力待ちの状態で操作不能になり、リモート・コンピュータのタスク・マネージャなどで強制終了せざるを得なくなる。リモート・コンピュータで実行する場合は、コマンドライン・プログラム専用と考えるべきだ。
リモートで実行するときのアカウントを指定する
前述のipconfigの実行例では、リモート・コンピュータ上のipconfigコマンドは、ローカル・コンピュータでPsExecを実行したときと同等のアカウント(資格情報)で実行される。PsExecでは、このリモートでの実行アカウントを-uオプションで明示的に指定できる。
psexec -u server1\administrator -p <パスワード> \\server1 ipconfig |
-pオプションを指定しない場合、PsExec実行直後に「Password:」というプロンプトが表示されるので、指定したアカウントに対応するパスワードを入力する。
特定のアカウントを指定しなければならない状況としては、まずローカル・コンピュータでPsExecを実行するときのアカウントが、リモート・コンピュータの管理者権限を持っていない場合が挙げられる。リモートで管理者権限のないアカウントでPsExecを実行すると「アクセスが拒否されました」というエラーが表示されて、実行に失敗する。
そのため、ローカル・コンピュータとリモート・コンピュータが異なるドメインに所属している(かつ信頼関係がない)場合や、少なくとも一方がワークグループ構成の場合は、-uオプションによるアカウント指定が必須となるだろう。
また、リモート・コンピュータで実行されるプログラムが共有フォルダなどのネットワーク・リソースをアクセスする場合も、アカウントの明示的な指定が必要だ。アカウントを明示しない場合、リモート・コンピュータでのプログラム実行には、PsExecを実行したときのアカウントに「偽装」したアカウントが利用される。この偽装アカウントはネットワーク・リソースにアクセスする権限がないので、やはりアクセス拒否エラーで実行に失敗してしまうのだ。
そのほか、ローカル・コンピュータではログオンできない特定アカウントでプログラムを実行しなければならない場合も、-uオプションでそのアカウントを指定する必要がある。
セキュリティ上、注意が必要なのは、-uオプションでアカウントを指定した場合、そのパスワードが平文でネットワークに流れてしまう、という点だ。パケット・モニタリングが仕掛けられている可能性があるような信頼できないネットワークでは、-uオプションは使うべきではない。
リモート・コンピュータ上でコマンド・プロンプトを起動する
例えば障害解析のために、リモート・コンピュータ上でいくつかのプログラムを実行してステータスを集めたい、といった場合は、リモート・コンピュータ上でコマンド・プロンプトを起動すると便利だ。
psexec \\server1 cmd |
このコマンドラインを実行すると、「C:\Windows\system32>」というプロンプトが表示され、リモート・コンピュータ上で起動されたコマンド・プロンプトの入力待ち状態になる。あとは、普段と同じくコマンドラインを入力すればリモート・コンピュータ上で実行され、結果がローカル・コンピュータに表示される。コマンド・プロンプトを終了するには、exitコマンドを実行する。
コマンド・プロンプトの内部コマンドを利用したい場合、コマンド・プロンプトを/cオプション付きで起動する必要がある(この意味はcmd /?のヘルプで確認できる)。以下は特定フォルダのファイル/サブ・フォルダ一覧を取得するためのコマンドラインである。/cに続いて、実行したいコマンドの文字列を指定する。
psexec \\server1 cmd /c "dir /a /s c:\work" |
dirコマンドは内部コマンドなので、このようにcmdのオプションとして指定する必要がある。
複数のリモート・コンピュータで同じプログラムを実行する
PsExecは単体で、複数のリモート・コンピュータに対して同じプログラムを実行させることができる。それには、単純にリモート・コンピュータ名をカンマで区切って指定すればよい。
|
||||||||||||
複数のリモート・コンピュータに同じプログラムを実行させる | ||||||||||||
このように複数のリモート・コンピュータ名を指定すると、1台ずつ順次実行される。 | ||||||||||||
|
あるいは、対象コンピュータ名を一行ずつ記したテキスト・ファイルを用意し、@<テキスト・ファイル名>というオプションを指定してPsExecを実行してもよい。
psexec @list.txt cmd /c set PROCESSOR_ARCHITECTURE |
この場合、list.txtに記されたリモート・コンピュータに対して、プロセッサ・アーキテクチャを表示させるプログラムが順次実行される。
Systemアカウントでプログラムを実行する
PsExecでは、-sオプションを指定することで、Systemアカウントの権限でプログラムを実行できる。これにより、例えばレジストリ・キーのHKLM\SAM\SAMのように、Systemアカウントだけにアクセスが許されているオブジェクトにもアクセスできるようになる。以下の例は、regコマンドでリモート・コンピュータserver1のレジストリHKLM\SAM\SAMキー以下を表示するものだ。
psexec -s \\server1 reg query HKLM\SAM\SAM /s |
もしPsExecの実行アカウントがリモート・コンピュータ(server1)の管理者権限を持っていない場合は、前述の-uオプションを併用する。
psexec -u example\administrator -s \\server1 reg query HKLM\SAM\SAM /s |
実行したいプログラムがリモート・コンピュータにない場合は?
例えばリモート・コンピュータにまだ展開していない独自プログラムを実行したい、といった場合には、-cオプションを指定する。
psexec -c \\server1 <ローカル・コンピュータ上のプログラムのパス> |
ローカル・コンピュータにあるプログラムが、リモート・コンピュータの%SystemRoot%\system32フォルダにコピーされてから実行される。実行が完了すると、そのプログラムは自動的にリモート・コンピュータから削除される。
-cオプションを指定したとき、リモート・コンピュータの%SystemRoot%\system32フォルダに同じ名前のプログラムが存在すると、「ファイルがあります。」というエラーでコピーにも実行にも失敗する。ローカルのプログラムで上書きして実行したい場合は、-cオプションと一緒に-fオプションを指定する。リモートよりローカルのプログラムのバージョンや日付が新しい場合のみ上書きするには、-cオプションと一緒に-vオプションを指定する。
◆
このほかにもPsExecは各種オプションを装備している。その詳細については、次のTechNetのページにあるオプション説明を参照していただきたい。
- Windows SysinternalsのPsExecのページ(マイクロソフト TechNet)
|
「Windows TIPS」 |
TechTargetジャパン
- recimgでPCのリフレッシュ用のイメージを作成する (2012/11/30)
recimgコマンドでカスタム回復イメージを作成しておけば、PCのリフレッシュで初期化されるOSイメージをあらかじめ用意しておくことができる - Windows 8をタッチで操作する (2012/11/29)
Windows 8をタッチで操作する。 スマートフォンでは当たり前のこのUIがやっとWindowsでも実用的に使えるようになった。そのUIについて解説する - iPhoneへのアプリケーションのインストールを制限する (2012/11/28)
社員に支給するiPhoneに無用なアプリケーションをインストールさせたくない… アップル製無償ツールによるアプリのインストール制限方法を解説 - 第342話 よっしゃー! (2012/11/27)
世界中で毎日毎日、男も女も、朝な夕なに、自宅で会社で、USBコネクタは何回くらいさされるんだろう…
|
|
キャリアアップ
- - PR -
イベントカレンダー
- - PR -
転職/派遣情報を探す
**先週の人気講座ランキング**
〜 Android編 〜
ホワイトペーパー(TechTargetジャパン)
「ITmedia マーケティング」新着記事
複数のECサイトでターゲットに合わせたサンプル配布ができるサービス、Buynd
複数のECサイトと購買データを共有することで、ターゲットへの商品サンプル配布が可能な...
ソーシャルメディアの口コミを分析した調査が浮上〜調査データランキング〜
「調査のチカラ」で人気がある調査データを紹介します。「宅配ピザ業界大手三社のクチコ...
Facebookの実名登録率は89.7%、トレンドマイクロ調査
Facebookユーザーの89.7%は実名――トレンドマイクロが発表した「Facebookの利用実態調...