(1) Windowsでサービスの起動状態(ステータス)を取得するバッチ
(1-1) 構文
(1-2) サンプルプログラム
(1-3) 実行手順
(1-4) 実行手順サンプル動画
(1) Windowsでサービスの起動状態(ステータス)を取得するバッチ
バッチ処理等でサービスを自動起動するシステムは多いと思います。その際に必要となる「サービスの起動状態」を取得するための方法やサンプルプログラムをご紹介します。
(図111)②
(1-1) 構文
まずはサービスの各種情報を取得するコマンドを紹介します。「sc query」コマンドを使う事で、指定したサービス名の起動状態をはじめとしたステータスを確認する事ができます。
(構文)
sc query "[サービス名]"
試しにコマンドプロンプトから実行すると次のようになります。
(図111)①
表示されている値の意味合いは次表の通りです。
(表1)
TYPE | サービスのタイプを表しています。具体的にはサービスが自分専用のプロセスを実行しているのか、あるいは共有プロセスを動かしているのか、といった情報が読み取れます。
(例) |
STATE | 起動状態の値です。
(例) |
WIN32_EXIT_CODE | サービスの起動の際の終了コードを表示します。意味合いとしては次の2通りに分かれます。
①値が「0」⇒正常に起動した |
(1-2) サンプルプログラム
上記の構文を実際にバッチのプログラムの中に組み込んだサンプルをご紹介します。
(処理の概要)
タイトルにもある「サービスの起動状態」を確認するためのプログラムです。変数「SRV_LIST」にカンマ区切りでサービスを列挙し、列挙された数だけforループでループし、それぞれ「sc query」コマンドにかけて状態を確認する流れです。
(図121)
(サンプルプログラム)
@echo off SETLOCAL ENABLEDELAYEDEXPANSION set SRV_LIST=[ServiceName1],[ServiceName2],[ServiceName3] rem forループでサービスの数だけループします。 rem その際に半角スペースが区切られない様に「@」に置換します。 for %%a in (%SERVICE_LIST: =@%) do ( rem 変数SRV_NAMEに「%%a」を代入 set SRV_NAME= %%a echo "Check Point #1 : " !SRV_NAME! rem 先程置換した「@」を元に戻して、正しいサービス名に戻します set SRV_NAME=!SRV_NAME:@= ! rem 先頭に来る余分なスペースを削る(もしあれば) set SRV_NAME=!SRV_NAME: =! echo "Check Point #2 : " !SRV_NAME! rem サービスの状態を取得します rem (詳細については下の「プログラム補足」を参照) for /f "delims=" %%f in ('sc query "!SRV_NAME!" ^| findstr STATE') do ( echo "Check Point #3 : %%f ) ) ENDLOCAL
(表:プログラム補足)
for /F %変数 in (‘[コマンド]’) do ([コマンド]) | forの「/F」オプションはin句内で指定したコマンドの実行結果を変数(%変数)に格納しています。しかし単独の%は消滅するため、%でエスケープをして「%%a」としています。 |
sc query “[サービス名]” ^| findstr STATE | ・前半の「sc query “[サービス名]”」で指定したサービスの情報を取得する事ができます。 ・後半の「findstr STATE」で上記sc queryの結果から、サービスの状態を意味する「STATE」の情報を取得しています。 |
(1-3) 実行手順
上記のサンプルプログラムを実際に実行するまでの手順(使い方)をご紹介します。
(1-3-1) ①バッチファイルを作成
まずは空のバッチファイルを作ります(拡張子.bat)。
(図131)①
(1-3-2) ②サンプルプログラムをコピペ
上記の空のバッチファイルをテキストエディタ等で開き、サンプルプログラムを貼り付けます。
その際の注意点として、コメント等の文字化けを防ぐため、エンコード方式がUTF-8になっていたらShift-JISに修正する必要があります。
(図131)②
(1-3-3) ③cmdから実行
コマンドプロンプトを開き、cdコマンド等でバッチの配備されているディレクトリに移動してから、バッチを実行します。
(図131)③
(1-4) 実行手順サンプル動画
上記の手順を動画でも実演しているので、必要に応じてご覧頂けたらと思います。
(操作動画)