連載
» 2017年10月12日 05時00分 公開

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

GUIのサービス管理ツールを使わず、コマンドラインでWindows OSのサービスを制御するには、sc.exeというコマンドを利用する。sc query/queryexでサービスの状態を把握し、sc qcで設定を確認する。

[打越浩幸,デジタルアドバンテージ]

対象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の場合は常に数十から数百のサービスが動作している(サービスについてはTIPS「svchost.exeプロセスとは何か?」も参照)。

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

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

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

sc.exeコマンドとは?

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

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

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

scコマンドのヘルプ scコマンドのヘルプ
引数なしでscを起動すると、ヘルプが表示される。scコマンドの機能はWindows OSのバージョンアップごとに少しずつ強化されている。以下は全てWindows 10での実行例。

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

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

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

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

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

sc queryコマンドでサービスを表示させる sc queryコマンドでサービスを表示させる
sc query 〜」を実行すると、「現在実行中」のサービスの一覧が表示される。サービスの名前や説明、状態(RUNNING)などの情報を取得できる。以後、scコマンドで個別のサービスを制御する場合は、引数に「サービス名(SERVICE_NAME)」を指定すること。

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

sc queryexによる詳細情報の表示 sc queryexによる詳細情報の表示
sc queryex」を使うと、サービスのプロセスID情報も取得できる。

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

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

全てのサービスを列挙する 全てのサービスを列挙する
停止中のサービスも含めて列挙するには「sc query state= all」「sc queryex state= all」を実行する。

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

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

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



特定のサービスの情報を取得する 特定のサービスの情報を取得する
sc query/queryexにサービス名を指定すると、そのサービスの情報だけを表示する。

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

 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コマンドで指定する「サービス名」は分かりづらいし、覚えづらい。そんな場合は、「sc getkeyname 〜」コマンドで、「サービスの表示名」からサービス名を求めると便利である。この例では、「Windows」という文字列を含むサービスの表示名一覧から特定のサービス(Windows Firewallサービス)のサービス名(mpssvc)を求めている。

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

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

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



サービスの説明文の表示 サービスの説明文の表示
sc qdescription 〜」を使うと、サービスの説明を確認できる。ただし、説明文が設定されていないサービスもある(OS標準以外のサービスの場合に多い)。

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

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



サービスの構成情報の表示 サービスの構成情報の表示
sc qc 〜」を使うと、サービスの構成情報(実行ファイルパスや依存関係情報)などを確認できる。

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

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

サービス管理ツールでみたサービスの詳細 サービス管理ツールでみたサービスの詳細
管理ツールにある[サービス]ツールでサービスの詳細プロパティ画面を表示させた例。このツールで可能なことは、全てscコマンドでもできるようになっている。

サービスの開始と停止

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

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

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



サービスの開始/停止 サービスの開始/停止
sc start 〜」「sc stop 〜」でサービスを開始したり、停止したりできる。これを実行するには、管理者権限のあるコマンドプロンプト上で実行する必要がある。

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

依存関係があるサービスの停止 依存関係があるサービスの停止
scコマンドでは、他のサービスに依存しているサービスは、構成状態によっては停止できないことがある。場合によっては、依存先のサービスを手動で停止するなどの措置が必要。

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

net start/stopでサービスを開始/停止する net start/stopでサービスを開始/停止する
単にサービスを開始したり、停止したりするだけなら、「net start 〜」「net stop 〜」コマンドも利用できる。依存関係のあるサービスの場合でも、関連するサービスを自動的に開始/停止してくれる。


 scコマンドにはこれ以外にもサービスを作成したり、構成を変更したりする機能があるが、それらについては別記事で紹介する。

■更新履歴

【2017/10/12】最新のWindows OSに対応して、内容を更新しました。

【2015/05/25】初版公開。


Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。