コンピュータのメンテナンス
 Computer >> コンピューター >  >> トラブルシューティング >> コンピュータのメンテナンス

【Windows】SCコマンドでサービスを制御する方法|状態確認・停止・開始をコマンド1行で

IT業務に携わるようになると、社内のさまざまなパソコンで動作しているサービスの状態を監視・確認する機会がぐっと増えます。

サービスの管理といえば、多くの人が使っているのが標準的な方法でしょう。管理ツールやコントロールパネルを開き、「サービス」ユーティリティを探して、必要な操作を行うという流れです。

また、ネットワーク上の別のコンピューターやサーバーで動作しているサービスを管理したい場合は、「コンピューターの管理」からリモートマシンに接続し、そこでサービスを操作することになります。

このアプローチ自体に問題はまったくありません。実際、世界中のシステム管理者がこうした標準的なWindowsユーティリティを使って企業のインフラを管理しています。しかし、もしコマンドプロンプトにたった1行入力するだけで、サービスの監視・停止・開始ができたらどうでしょうか。

コマンドラインからサービスを制御する

クライアントPCのサービスを停止しなければならない場面は意外と多くあります。たとえば、ソフトウェアを再インストールする前などがその典型です。あるいは、サーバー上のソフトウェアが正常に動作していないため、関連サービスを再起動する必要があるケースもあるでしょう。

これまで、ネットワーク上のクライアントマシンのサービス管理には、標準のサービスツールを使っていた方がほとんどのはずです。これはコントロールパネルの「管理ツール」から起動できる「サービス」ツールのことです。

【Windows】SCコマンドでサービスを制御する方法|状態確認・停止・開始をコマンド1行で

管理ツールでは「サービス」を直接開くこともできますし、ネットワーク上の別のコンピューターにアクセスしたい場合は「コンピューターの管理」を開きます。

【Windows】SCコマンドでサービスを制御する方法|状態確認・停止・開始をコマンド1行で

別のコンピューターに接続するには、「操作」メニューから「別のコンピューターへ接続」をクリックし、相手のコンピューターのネットワーク名を入力します。

【Windows】SCコマンドでサービスを制御する方法|状態確認・停止・開始をコマンド1行で

あとはサービスツールを開けば、リモート側のサービスを操作できるようになります。

もっと手軽にサービスを管理する方法

さて、ここまで説明したのはいわば「遠回りな方法」です。より短時間で済む近道こそが、「SC」コマンドの活用です。

NETコマンドをご存じの方なら、SCコマンドにもすぐ慣れるでしょう。SCコマンドはNETコマンドとほぼ同じですが、監視・停止・開始に加えて、サービスの新規作成まで行える点が異なります。さらに便利なことに、管理者権限があればネットワーク経由で他のコンピューターに対してもSCコマンドを実行できます。

コンピューターに対してSC queryを実行すると、インストール済みのすべてのサービスと、それぞれが実行中かどうかの一覧を取得できます。「SC \\コンピューター名 query |more」というコマンドを実行すると、次のような出力が得られます。

【Windows】SCコマンドでサービスを制御する方法|状態確認・停止・開始をコマンド1行で

ご覧のとおり、サービスの状態(STATE)や種類、その他のパラメーターが表示されます。ここでは練習として、サービスの「状態」だけに注目していきましょう。

現在停止しているサービスだけを一覧表示したい場合は、「SC \\コンピューター名 query state= "inactive" |more」というコマンドを実行します。

末尾の「|more」は、出力を画面単位で一時停止させ、スクロールしながら確認できるようにするオプションです。

【Windows】SCコマンドでサービスを制御する方法|状態確認・停止・開始をコマンド1行で

このように、表示されたサービスがすべて停止状態であることが分かります。大量のサービスの中から目的のものを探すのは大変ですが、サービス名が分かっていれば、次のコマンドだけで特定のサービスの状態を確認できます。
「SC \\コンピューター名 query サービス名」

【Windows】SCコマンドでサービスを制御する方法|状態確認・停止・開始をコマンド1行で

これにより、指定したサービスの現在のステータスだけが返されます。リモートでサービスを停止するには、次のようにstopコマンドを実行するだけです。
「SC \\コンピューター名 stop サービス名」

【Windows】SCコマンドでサービスを制御する方法|状態確認・停止・開始をコマンド1行で

実行直後の出力では「STOP_PENDING」と表示されますが、少し待ってから再度そのサービスを照会すると、停止していることが確認できます。サービスを開始するときは、同じコマンドの「stop」を「start」に置き換えて実行するだけです。

任意のサービスを照会・停止・開始するスクリプトを作る

基本が身についたところで、今度はコマンド文字列を覚えなくても目的のサービスを停止・開始できるスクリプトを作ってみましょう。以下のような内容のバッチファイル(拡張子.bat)を作成すれば、対話形式で操作できます。

@echo off
setlocal
set /p STRCOMPUTER=対象のコンピューター名を入力してください(ローカルの場合は . ):
set /p STRSERVICE=停止・開始したいサービス名を入力してください:
set /p STRACTION=実行する操作を入力してください(stop または start):
sc \\%STRCOMPUTER% %STRACTION% %STRSERVICE% >> c:\temp\results.txt
echo.
echo 処理を実行しました。結果は c:\temp\results.txt を確認してください。
pause

このスクリプトを実行すると、まず停止または開始したいサービスの名前を尋ねられます。

【Windows】SCコマンドでサービスを制御する方法|状態確認・停止・開始をコマンド1行で

続いて、サービスを停止するのか開始するのかを選択します。

【Windows】SCコマンドでサービスを制御する方法|状態確認・停止・開始をコマンド1行で

「>> c:\temp\results.txt」という部分のおかげで、停止・開始の実行結果やエラーがテキストファイルに出力されるため、コマンドが正しく機能したかどうかを後から確認できます。

筆者がこのスクリプトを実行した際は、実行前後でサービスを照会し、結果を比較しました。

【Windows】SCコマンドでサービスを制御する方法|状態確認・停止・開始をコマンド1行で

ご覧のとおり、停止対象としたhelpsvcサービスは最初「RUNNING(実行中)」でした。スクリプトで停止コマンドを実行した後、照会すると「STOPPED(停止)」に変わっています。

さらに凝りたい場合は、PCにインストールされている全サービスの一覧をテキストファイルに出力し、どのサービスを操作するか決める前に確認できるような処理を追加してもよいでしょう。その場合のコマンドは「sc \\%STRCOMPUTER% query > c:\temp\services.txt」のようになります。

このように、SCコマンドはあらゆるコンピューター上のサービスを管理するための強力かつ効率的な手段になります。Windowsのスクリプトにある程度精通していれば、この一連の作業を自動化して、日々の運用をさらにラクにすることも可能です。

SCコマンドはあなたの日常業務に役立ちそうでしょうか。コマンドを自動実行するスクリプトについてはいかがでしょう。ぜひコメント欄でアイデアや意見を共有してください。

画像クレジット:Shutterstock

  1. Linuxのwatchコマンドの使い方と実用例をわかりやすく解説

    Linuxのwatchコマンドは、指定したコマンドを一定間隔で繰り返し実行し、その結果を画面に表示し続けるためのツールです。コマンドの出力が時間とともにどう変化するかをリアルタイムで監視したい場合に非常に便利です。この記事では、watchコマンドの基本的な使い方と、覚えておくと役立つ実用的な例を紹介します。 watchコマンドの基本構文 watchコマンドの構文は以下のとおりです。 watch オプション コマンド 各要素の意味は次のとおりです。 オプション: 後述の表から選択したオプションを指定します。watchコマンドのデフォルト動作を変更できます。 コマンド: watchが繰り返し実行

  2. Raspberry PiとOctoPrintで3Dプリンターを快適に制御する方法

    3Dプリンティングは、初心者にとってハードルが高い趣味に思えるかもしれません。しかし、仕組みさえ理解してしまえば、非常に楽しくやりがいのある趣味へと変わります。入門者の中には、Windows 10で手軽に使えるプラグアンドプレイ式の3Dプリンターを購入したいと考える方も多いでしょう。例えば、Monoprice Select Mini Pro(約250ドル)や、3Dプリントに加えてレーザー彫刻・CNCフライス盤機能も備えたSnapmaker 3in1(約800ドル)などが挙げられます。どちらもエントリーモデルとして優れた選択肢ですが、造形サイズが小さいため、大きなパーツを印刷したくなったとき、す