ここから本文です

scコマンドでWindows OSのサービスを確認/一覧/開始/停止する

10/12(木) 14:36配信

@IT

――
対象OS:Windows 7/Windows 8/Windows 8.1/Windows 10/Windows Server 2008 R2/Windows Server 2012/Windows Server 2012 R2/Windows Server 2016
――

●Windows OSの「サービス」とは?

 Windows OSの「サービス」とは、システムのバックグラウンドで動作している特別なプロセスのことで、ユーザーからの要求だけでなく、システム内の各コンポーネントからの要求に応じて稼働する。システムにもよるが、Windows OSの場合は常に数十から数百のサービスが動作している。

 サービスの状態を調べたり、設定を確認したりするには、管理ツールグループに用意されている「サービス」というツールを使うか、タスクマネージャーの「サービス」タブを利用するのが一般的である。

 だがGUIが使えない場合や、サービスの状態や設定をリストにしておきたい場合は、コマンドラインで利用できるCUIのツールが便利である。

 Windows OSには「sc.exe」というサービスを制御するためのコマンドラインツールが用意されている。本TIPSではこのsc.exeコマンドの基本的な使い方についてまとめておく。

●sc.exeコマンドとは?

 「sc.exe」は、サービスの状態確認や作成、削除、管理を行うためのコマンドである。

 タスクマネージャーの[サービス]タブや、[管理ツール]の[サービス]ツールでは、サービスの状態を確認したり、サービスの開始や停止を行ったりすることができる。だが、サービスの作成や削除、設定変更などはscコマンドやPowerShell(の*-Serviceコマンドレット)などを使う必要がある。

 scコマンドの使い方は、引数なしでscを起動すると表示される。

 scには数多くのサブコマンドがあり、scに続けてサブコマンド名と(必要に応じて)パラメーターを指定する。各サブコマンドの使い方は、パラメーターなしで例えば「sc config」や「sc start」のようにすれば表示される。

 以下に、主なscのサブコマンドを列挙しておく。

――
○sc.exeの主なサブコマンド
・scのサブコマンド/用途
sc query/サービスの取得。サービス名を省略すると一覧を表示
sc queryex/サービスの詳細の取得
sc getkeyname/サービスの表示名からサービス名を取得する
sc getdisplayname/サービス名からサービスの表示名を取得する
sc qdescription/サービスの説明文の取得
sc qc/サービスの構成情報の取得
sc config/サービスの構成情報の設定
sc start/サービスの開始
sc stop/サービスの停止
sc create/サービスの作成
sc delete/サービスの削除
――

●実行中のサービスの一覧の取得

 実行中のサービスの一覧を取得するには、「sc query」か「sc queryex」コマンドを使う。

 「sc query」の代わりに「sc queryex」とすると、より詳細な情報(サービスのプロセスID番号など)が得られる。

●停止中のサービスも含めて一覧を列挙するには?

 「sc query」や「sc queryex」を実行すると、デフォルトでは「実行中(RUNNING)」のサービスのみが列挙される。停止中のサービスも含めて、全てのサービスを列挙するには、これらのコマンドに「state= all」というパラメーターを追加して実行する(state=とallの間に空白を空けないと、OSのバージョンによっては正しく動作しないので注意)。

●特定のサービスの詳細な情報の取得

 sc queryやsc queryに限らず、scではコマンド名に続けて「サービス名(SERVICE_NAME)」を指定すると、そのサービスだけを操作対象にできる。

――
※「Windows Update」サービスの情報を取得する
sc query wuauserv
――

●サービスの表示名から、特定のサービスの詳細な情報の取得する

 sc query/queryexコマンドで特定のサービスの情報を取得する場合、引数としては、調査したいサービスの「サービス名(SERVICE_NAME)」を指定する必要がある。「表示名(DISPLAY_NAME)」を指定してもエラーとなる。

 そのため必要なら、あらかじめ引数なしのsc queryコマンドやsc getkeynameコマンドで、正確なサービス名を調べておく。sc getkeynameは表示名からサービス名を取得するためのコマンドである。

 これらのコマンドを使うと、例えば「Windows」という名前を含むサービスの一覧を列挙して、その中から特定のサービスの情報を取得する、といったことが可能になる。

――
※ステップ1:「Windows」という語を含むサービスを検索してみる
sc query | find /i “Windows” | sort
※ステップ2:「Windows Firewall」サービスのサービス名を調べてみる
sc getkeyname “windows firewall”
------------
※ステップ3:「Windows Firewall」サービスの情報を取得する
sc query mpssvc
――

●サービスの説明や構成情報を取得するには?

 サービスの(日本語の)説明文を取得するには、「sc qdescription ~」コマンドを利用する。サービスに説明文が設定されていれば、それが表示される。

※「Windows Firewall」サービスの説明文を取得する
sc qdescription mpssvc

 サービスの構成情報(サービス間の起動設定や依存関係、実行ファイルのパスなどの情報)を取得するには、「sc qc ~」を利用する。

※「Windows Firewall」サービスの構成情報を取得する
sc qc mpssvc

○[補足]サービス管理ツールでサービスの状態を見る

 ちなみに同じサービスを[管理ツール]の[サービス]ツールで確認すると次のようになっている。

●サービスの開始と停止

 scコマンドを使ってサービスを開始もしくは停止するには「sc start ~」「sc stop ~」が利用できる(管理者権限のあるコマンドプロンプト上で実行すること)。

――
※「Windows Search」サービスを停止する
sc stop wserch
※「Windows Search」サービスを開始する
sc start wserch
――

 ただし「sc stop ~」を使ってサービスを停止させる場合、依存するサービス(sc qc ~の実行結果にある「DEPENDENCIES」の項目)があるなら、先にそれを手動で停止しておかないとエラーになることがある。また、これらのコマンドはサービスに開始や終了の“トリガーを送信するだけ”で、実際にサービスが開始/終了するまで待つようにはなっていない(非同期で動作するということ)。そのため、これらのコマンドは、あまり使い勝手がよくない。

 そこでサービスを開始させたり終了させたりしたい場合は、scコマンドの代わりに「net start ~」や「net stop ~」コマンドを使うとよい(パラメーターにはサービス名と表示名のどちらでも指定できる)。これらのコマンドでは、依存するサービスなどがあれば自動的に停止してくれる。ただしタイムアウト値には制限があるので(数十秒ほど)、起動や終了に長い時間かかるようなサービスではその応答を待たずに、コマンドプロンプトへ戻ってくることがある。

 scコマンドにはこれ以外にもサービスを作成したり、構成を変更したりする機能がある。

最終更新:10/12(木) 14:36
@IT