PR
 コマンドライン中毒のユーザーはWindowsのサービスをコマンドプロンプトから操作するのが大好きである。ただし2,3年前まではNet Start,Net Pause,Net Continue,Net Stopくらいしかその手段は提供されていなかった。これらは名前の通りサービスの開始,一時停止,続行(つまり「一時停止の解除」),および停止を行うためのコマンドである。これ以外の操作をコマンドラインから行いたければ,Windows XP以降標準で装備されているSCツール(sc.exe)を検討してみると良い。

構文

 SCコマンドの基本構文は次のようになっている。

sc [\\<サーバー名>] <コマンド> <サービス名> [<オプション>] 

 サーバー名はオプションであり,コマンドを適用するシステムを指定する。コマンドはSCの特定のサブコマンドである(pause,start,create,deleteなど)。サービス名はサービスの内部名であり,オプションはサブコマンドが要求する任意のオプションである。次に簡単な例を挙げる。

sc \\server1 stop lanmanserver 

 これを実行すると,server1サーバーに接続し,内部サービス名がlanmanserverのサーバー・サービスを停止する。ローカルのサーバー・サービスを停止する場合は,サーバー名オプションを指定しなければ良い。

サービスの内部名の取得

 コマンドを利用するには,サービスの内部名を知っておく必要がある。ファイル・サーバー・サービスの表示名をServerと想定した場合,次のコマンド

sc stop server 

を実行するとエラーになる。サービス名としてlanmanserverを指定した場合のみこのコマンドは正常に動作する。

 この内部名はキー名とも呼ばれる。これはWindowsがこのサービスに関する情報を格納しているレジストリHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servicesのサブキー名としてlanmanserverを使用しているためである。

 よりわかりやすい表示名(ファイル・サーバー・サービスの場合はserver,DNSサーバー・サービスの場合はDNS)がわかっている場合は,getkeynameコマンドを使用すれば表示名がキー名に変換される。例えば,DNSサーバー・サービスのキー名を知るためには次のコマンドを使用できる。

sc getkeyname "dns server" 

 これを実行して取得されるDNSサーバー・サービスのキー名はDNSである(SCは大文字と小文字を区別しないようだ)。このコマンドは逆方向にも利用できる,つまりキー名を指定してよりわかりやすい表示名を取得することもできる。この場合はgetdisplaynameコマンドを使用する。

どのように動作するのか?

 SCには先に説明したNetコマンドに対応する四つのコマンド,start,stop,pause,およびcontinueがある。例えばサーバー・サービスを一時停止するには以下を実行する。

sc pause server 

 SCの「stop」機能の動作は,Microsoft Management Console(MMC)ServicesスナップインまたはNet Stopコマンドとは若干異なる。ServicesスナップインおよびNet Stopはコンピュータ・ブラウザ・サービスがサーバー・サービスに依存していることを理解しているため,コンピュータ・ブラウザ・サービスも同時に停止するかどうかを尋ねてくる。

 これに対してSCでは,動作中のほかのサービスが依存しているサービスにstopコントロールを送信すると,単にエラーとなる。別の言い方をすれば,SCはほかのコマンドほど賢くないということになる。

 ただし,enumdependコマンドを使用すれば,指定したサービスにどのサービスが依存しているかを特定できる。

sc enumdepend lanmanserver 

 これを実行すると,SCは分散ファイル・システム(Distributed File System:DFS)およびブラウザ・サービスが,サーバー・サービスに依存していることを通知する。ただしSCはこの情報を,詳しい人にしかわからないような簡潔な形で返す。

 例えば,queryコマンドはサービスの現在の状態の問い合わせに使用できる。

sc query lanmanserver 

を実行してサーバーの状態を問い合わせると,図1に示すような形式でサービスに関する情報を表示する。

図1●クエリー・コマンドのアウトプット

SERVICE_NAME:  lanmanserver
  TYPE                      : 20 WIN32_SHARE_PROCESS
  STATE                     : 4 RUNNING
                            (STOPPABLE, PAUSABLE, ACCEPTS_SHUTDOWN)
  WIN32_EXIT_CODE           : 0 (0x0)
  SERVICE_EXIT_CODE         : 0 (0x0)
  CHECKPOINT                : 0x0
  WAIT_HINT                 : 0x0

 SCは便利なツールだが,私はまだ使い始めたばかりである。次回はSCを利用するためのステップについて取り上げるので楽しみに待っていていただきたい。