Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Windows Server バッチ処理 (Batch Scripts)

Windowsでサービスの起動状態(ステータス)を取得するバッチ

投稿日:2020年11月1日 更新日:

<目次>

(1) Windowsでサービスの起動状態(ステータス)を取得するバッチ
 (1-1) 構文
 (1-2) サンプルプログラム
 (1-3) 実行手順
 (1-4) 実行手順サンプル動画

(1) Windowsでサービスの起動状態(ステータス)を取得するバッチ

バッチ処理等でサービスを自動起動するシステムは多いと思います。その際に必要となる「サービスの起動状態」を取得するための方法やサンプルプログラムをご紹介します。

(図111)②

(1-1) 構文

まずはサービスの各種情報を取得するコマンドを紹介します。「sc query」コマンドを使う事で、指定したサービス名の起動状態をはじめとしたステータスを確認する事ができます。
(構文)

sc query "[サービス名]"

試しにコマンドプロンプトから実行すると次のようになります。

(図111)①

表示されている値の意味合いは次表の通りです。
(表1)

TYPE サービスのタイプを表しています。具体的にはサービスが自分専用のプロセスを実行しているのか、あるいは共有プロセスを動かしているのか、といった情報が読み取れます。

(例)
10  WIN32_OWN_PROCESS
20  WIN32_SHARE_PROCESS

STATE 起動状態の値です。

(例)
1  STOPPED
3  STOP_PENDING
4  RUNNING

WIN32_EXIT_CODE サービスの起動の際の終了コードを表示します。意味合いとしては次の2通りに分かれます。

①値が「0」⇒正常に起動した
②値が「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) 実行手順サンプル動画

上記の手順を動画でも実演しているので、必要に応じてご覧頂けたらと思います。
(操作動画)

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-Windows Server, バッチ処理 (Batch Scripts)

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

バッチで見る「2>&1」の意味とリダイレクトの種類について

<目次> (1) バッチで見る「2>&1」の意味とリダイレクトの種類について  (1-1) 「2>&1」の意味  (1-2) 「2>&1」の各文字の意味  ( …

バッチ処理のパイプ「| の使い方が誤っています。」エラーの原因と対処について

<目次> (1) バッチ処理のパイプ「| の使い方が誤っています。」エラーの原因と対処について  (1-1) エラー概要  (1-2) エラー原因  (1-3) エラー対処 (1) バッチ処理のパイプ …

バッチでフォルダやファイルの存在チェックを行う方法~if exist文の活用~

<目次> (1) バッチでフォルダやファイルの存在チェックを行う方法~if exist文の活用~  (1-1) バッチでフォルダの存在チェックを行う方法  (1-2) バッチでファイルの存在チェックを …

WindowsServerでユーザーを追加する方法(WinSV2016を例に紹介)

<目次> (1) WindowsServerでユーザーを追加する方法  (1-1) ユーザー追加の手順  (1-2) 追加したユーザーを管理者にする場合の手順  (1-3) 参考:ローカルユーザーとド …

WindowsServerのエラー14001「サービスを開始できませんでした~」の原因と対処

<目次> (1) WindowsServerのエラー14001「サービスを開始できませんでした~」の原因と対処  (1-1) エラーメッセージ&発生状況  (1-2) イベントログのエラー内容  (1 …

  • English (United States)
  • 日本語
Top