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 ・ ・ ・
ただ、残念なことに、これは遅すぎる。