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

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

関連記事

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

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

バッチファイルでSQLServerに接続する方法~sqlcmdの各オプション挙動を実例で紹介~

<目次> (1) バッチファイルでSQLServerに接続する方法  (1-1) 構文  (1-2) オプションの説明  (1-3) 各オプションの挙動をサンプルで確認 (1) バッチファイルでSQL …

HyperVのチェックポイントを削除する手順+操作動画もご紹介

<目次> (1) HyperVのチェックポイントを削除する手順+実際の画面をもご紹介  (1-1) 削除の手順  (1-2) 参考情報 (1) HyperVのチェックポイントを削除する手順+操作動画も …

Windows Server2012で仮想サーバーのメモリ割当ての変更をする手順

(0)目次&概説 (1) 前提条件 (2) メモリ割当ての変更手順  (2-1) 事前作業(ログ取得)  (2-2) 仮想サーバーの停止  (2-3) リソース変更  (2-4) 仮想サーバーの起動 …

Windowsのバッチで日付(yyyymmdd形式)や時刻(hhmmss形式)を取得する方法

<目次> (1) Windowsのバッチで日付(yyyymmdd形式)や時刻(hhmmss形式)を取得する方法  (1-1) バッチで日付を取得する  (1-2) バッチで日付を取得する(yyyymm …

  • English (United States)
  • 日本語
Top