vbscriptを利用してサービスの状態を表示する

Windows XPでサービスの状態をコマンドラインから簡単に参照するには

sc query servicename

で可能だが、サービスの状態以外の情報も表示されてしまう。

>sc query eventlog

SERVICE_NAME: eventlog
        TYPE               : 20  WIN32_SHARE_PROCESS
        STATE              : 4  RUNNING
                                (NOT_STOPPABLE,NOT_PAUSABLE,ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

そこでvbscriptでサービスの状態のみを表示するスクリプトを書いてみた。

Option Explicit
' コマンドライン引数を取得
Dim objArgs
Dim servicename
Set objArgs = WScript.Arguments

If objArgs.Count <> 1 Then WScript.Quit(1)

servicename = objArgs(0) 
' サービス状態を取得

Dim objWMIService, colRunningServices, objService
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colRunningServices = objWMIService.ExecQuery("Select * from Win32_Service where displayname='" & servicename & "'")

If colRunningServices.Count = 0 Then
    WScript.Echo servicename & " [ not found ]"
End If

For Each objService in colRunningServices
   Wscript.Echo objService.DisplayName  & " [" & objService.State & "]"
Next

このファイルをsvstat.vbsなどの名前で保存し、実際に利用するときには、

> cscript //Nologo svstat.vbs "event log"

として実行する。