Windowsでサービス状態一覧を表示するコマンドがないのはなぜだろうか?
Windows Nのころから、Windowsのサービスを起動、停止すことはできた。
net コマンド
起動
net start "サービス名"
停止
net stop "サービス名"
でも状態を確認するコマンドはなかった。
以下のコマンドがあってもいいのにないつも思ってた。
Windows XPからscコマンドが増え、サービスをコントロールをできるようになり、
ステータスの表示もできるようになった。
しかし、このコマンドの表示結果を検索しようとすると不便なのだ。
まずは、scコマンドとバッチで状態一覧を表示するようにしてみる。
scコマンドでの表示
sc query state= all type= service
SERVICE_NAME: Alerter DISPLAY_NAME: Alerter TYPE : 20 WIN32_SHARE_PROCESS STATE : 4 RUNNING (STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0 SERVICE_NAME: ALG DISPLAY_NAME: Application Layer Gateway Service TYPE : 10 WIN32_OWN_PROCESS STATE : 4 RUNNING (STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0 SERVICE_NAME: AntiVirSchedulerService DISPLAY_NAME: Avira AntiVir TYPE : 110 WIN32_OWN_PROCESS (interactive) STATE : 4 RUNNING (NOT_STOPPABLE,NOT_PAUSABLE,ACCEPTS_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0 SERVICE_NAME: AntiVirService DISPLAY_NAME: Avira AntiVir Guard TYPE : 110 WIN32_OWN_PROCESS (interactive) STATE : 4 RUNNING (NOT_STOPPABLE,NOT_PAUSABLE,ACCEPTS_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0 SERVICE_NAME: Apache2.2 DISPLAY_NAME: Apache2.2 TYPE : 10 WIN32_OWN_PROCESS STATE : 1 STOPPED (NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN) WIN32_EXIT_CODE : 1077 (0x435) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0 SERVICE_NAME: Apple Mobile Device DISPLAY_NAME: Apple Mobile Device TYPE : 10 WIN32_OWN_PROCESS STATE : 4 RUNNING (STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0 SERVICE_NAME: AppMgmt DISPLAY_NAME: Application Management TYPE : 20 WIN32_SHARE_PROCESS STATE : 1 STOPPED (NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN) WIN32_EXIT_CODE : 1077 (0x435) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0 SERVICE_NAME: aspnet_state DISPLAY_NAME: ASP.NET TYPE : 10 WIN32_OWN_PROCESS STATE : 1 STOPPED (NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN) WIN32_EXIT_CODE : 1077 (0x435) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0 SERVICE_NAME: ATKKeyboardService DISPLAY_NAME: ATK Keyboard Service TYPE : 110 WIN32_OWN_PROCESS (interactive) STATE : 4 RUNNING (STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0 ・ ・ ・
scコマンドで必要な情報だけ抽出する3行ごとの表示
@echo off for /F "eol=; tokens=1,2* delims= " %%i in ('"sc query state= all type= service"') DO echo %%i %%j %%k |findstr "SERVICE_NAME DISPLAY_NAME STATE"
SERVICE_NAME: Alerter DISPLAY_NAME: Alerter STATE : 4 RUNNING SERVICE_NAME: ALG DISPLAY_NAME: Application Layer Gateway Service STATE : 4 RUNNING SERVICE_NAME: AntiVirSchedulerService DISPLAY_NAME: Avira AntiVir STATE : 4 RUNNING SERVICE_NAME: AntiVirService DISPLAY_NAME: Avira AntiVir Guard STATE : 4 RUNNING SERVICE_NAME: Apache2.2 DISPLAY_NAME: Apache2.2 STATE : 1 STOPPED SERVICE_NAME: Apple Mobile Device DISPLAY_NAME: Apple Mobile Device STATE : 4 RUNNING SERVICE_NAME: AppMgmt DISPLAY_NAME: Application Management STATE : 1 STOPPED SERVICE_NAME: aspnet_state DISPLAY_NAME: ASP.NET STATE : 1 STOPPED SERVICE_NAME: ATKKeyboardService DISPLAY_NAME: ATK Keyboard Service STATE : 4 RUNNING SERVICE_NAME: AudioSrv DISPLAY_NAME: Windows Audio STATE : 4 RUNNING ・ ・ ・
1行に表示する ステータス サービス名 ディスプレー名の順
@echo off setlocal for /F "eol=; tokens=1,2* delims=:" %%i in ('"sc query type= service state= all" ') DO call :SERVICE "%%i %%j %%k" GOTO :END :SERVICE for /F "tokens=2" %%i in ('echo "%~1" ^|findstr SERVICE_NAME' ) DO set SERVICE_NAME=%%i && SET SNFLAG=ON for /F "eol=; delims=:" %%i in ('echo "%~1" ^|findstr DISPLAY_NAME' ) DO set DISPLAY_NAME="%%~i" && SET DNFLAG=ON for /F "tokens=4" %%i in ('echo "%~1" ^|findstr STATE') DO set STATE=%%i && SET SFLAG=ON if {%SNFLAG%}=={ON} ( if {%DNFLAG%}=={ON} ( if {%SFLAG%}=={ON} ( call :PRINT SET SNFLAG=OFF SET DNFLAG=OFF SET SFLAG=OFF ) ) ) GOTO :EOF :PRINT echo %STATE:~0,7% %SERVICE_NAME% %DISPLAY_NAME:~14,-4% GOTO :EOF :END endlocal
RUNNING Alerter Alerter RUNNING ALG Application Layer Gateway Service RUNNING AntiVirSchedulerService Avira AntiVir RUNNING AntiVirService Avira AntiVir Guard STOPPED Apache2.2 Apache2.2 RUNNING Apple Apple Mobile Device STOPPED AppMgmt Application Management STOPPED aspnet_state ASP.NET RUNNING ATKKeyboardService ATK Keyboard Service RUNNING AudioSrv Windows Audio RUNNING BITS Background Intelligent Transfer Service ・ ・ ・
ただ、残念なことに、これは遅すぎる。