Windowsサーバーの「SC(sc.exe)」に関する私たちの最終記事を読む準備はできているだろうか? SC(sc.exe)とは,サービスの広範な制御を可能にするコマンドライン・ツールのことだ。筆者は過去のコラムで,SCを使ってサービスの開始や停止,新しいサービスの作成,既存のサービスの削除,サービス間の依存の制御などを行う方法を紹介した(関連記事:SCコマンド -- あらゆる目的に使えるサービス管理コマンド 「第1回 SCをNetコマンドの代わりに使用する」「第2回 SC利用のための三つのステップ」,「第3回 SCをより強力にコントロールする三つのサブコマンド」)。

 だが,サービスに対してできることは,これがすべてではない。例えば,筆者はサービスの起動設定を変更したくなることがよくある。起動設定とは,サービスは自動的に起動するのか,それとも手動で起動させるのか,サービスは無効になっているのか,といったことだ。「SC Config」コマンドを使うと,起動設定の制御やその他いろいろなことが可能になる。

「SC Config」コマンドはどのように機能するのか?

 「SC Config」コマンドは,筆者が以前紹介した「SC Create」コマンドに酷似している。「SC Config」コマンドの全体的な構文は,以下のような感じになる。

sc config <servicekeyname> <option= value>
  <option= value>

 このコマンドの便利さを示すために,以下に例を紹介しよう。Windows Server 2003 Service Pack 1 (SP1)とWindows XP SP2がMessengerサービスを無効にして以来,筆者は同サービスを必要とする人々から頻繁に電子メールを受け取っている(「Net Send」コマンドを重宝している人もいるのだ)。コンピュータのブート時に,Messengerサービスも同時に起動するように設定するには,以下のように入力するといい(SCの構文には,等号とオプションの値の間にスペースが必要だという,奇妙な特性があることに注意してほしい)。

sc config messenger start= auto

 このほかに可能な値としては,「boot」や「system」「demand (すなわち『manual』)」「disabled」がある。

 Windows Vistaシステムの場合は,可能な値がもう一つある。Vistaの新しい遅延起動オプションを反映した「delayed-auto(遅延自動起動)」だ。遅延起動サービスという概念は,自動起動サービスの多くは自動で起動する必要があるものの,必ずしもすぐに起動する必要はないというMicrosoftの考えを反映している。Microsoftは,Vistaができるだけ素早く起動して使用できる状態になることを望んでいる。XPやWindows 2000のデスクトップOSの起動に時間がかかる理由の一つは,それらのOSが,毎回すぐに起動する自動起動サービスを待っているからである。

 「SC Config」コマンドの便利なオプションとしては他に,「password」や「error」「depend」,さらには「obj」がある。「obj」と「password」のオプションについては,読者の皆様もすでにご存じだろう。SC Configで「obj=」を使うと,どのアカウント下でサービスを実行するのかを設定することができる。SC Createで「obj=」パラメータを使用して,サービス・アカウントを指定するのと全く同じだ。おそらく,サービス・アカウントを変更することは,それほど頻繁にはないだろう。だが,アカウントのパスワードを変更することはあるかもしれない。パスワードを変更するときは,「password=」オプションを使うといい。「myservice」というキー名を持つサービスのサービス・アカウントで,パスワードが「swordfish」に変更された場合,これをWindowsに伝えるには以下のように入力する。

sc config myservice password= swordfish

 サービスに障害が発生したときは,「error=」オプションを使ってWindowsの挙動を制御できる。新しいWindowsサービスを作成するとき,Windowsに四つのうちの一つの方法でサービス障害に対処するよう,指示を出せることを思い出してほしい。障害をイベント・ログに記載するだけの「ignore」,メッセージを表示して障害を知らせるが作業はそのまま続ける「normal」,Last Known Goodの構成でシステムを再起動して再試行する「severe」,そしてシステムを再起動して,サービスを再試行し,それでも障害が発生する場合はブルースクリーンを表示する「critical」の四つだ。myserviceを実行できないときは,Windowsも実行しない(これが慎重に使うべき手段なのは言うまでもない)ということをWindowsに伝えるには,次のように入力するといい。

sc config myservice error= critical

 SC Configについては,まだ少し紹介すべきことが残っている。特筆すべき奇妙な点が,あと一つあるのだ。過去のコラムで,SC使用時に一つのコマンドに対して,二つ以上の「オプション/値」のペアを指定できるときは,必ず複数の「オプション/値」ペアの間をフォワードスラッシュ(/)で区切る必要がある,と筆者は説明してきた。筆者は先月,「depend=」オプションを使ってこの手法を実証した。VistaのSCコマンドの構文を調べても,同様の手法を確認することができるはずだ。

 これとは対照的にSC Configの場合は,複数のオプションの間にスペースを挿入するだけで,それらのオプションを指定することができる(確かに,スクリプティングの世界ではこの形式が標準なのかもしれないが,SCの他の構文と比較した場合,この形式は奇異な印象を与える)。例えば,最後に紹介した二つのコマンドを一つにまとめるときは,以下のように入力することができる。

sc config myservice password= swordfish error= critical

いろんな可能性を考えよう

 バッチ・ファイルを使いたいので,コマンドラインからサービスを制御する必要がある? リモートでシステムの設定を行うのに,帯域をあまり使わないテキストのインタフェースを使いたい? おそらく,あなたは今,まもなく登場するコマンドラインのみのServer Core製品を使いこなせるように,コマンドラインについての知識を吸収している最中なのだろう。どんなシナリオであれ,あなたはSCを便利なツールだと感じるに違いない。

■変更履歴
Messengerサービスを自動起動させるコマンド例のところで「sc config messenger option= auto」としていましたが、正しくは「sc config messenger start= auto」です。お詫びして訂正します。本文は修正済みです。 [2008/09/10 16:10]