こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

サービス再起動

-教えて下さい-
【質問】VBScriptで特定のサービスを再起動させることってできますか?可能であれば、その記述を教わりたいです。
【OS】Win2000、WinXP、Vista
【サービス】コンピューターの管理⇒サービスとアプリケーション⇒サービスで表示される(XP)サービス一覧の中の任意のサービス
PS:VBScript初心者です。

投稿日時 - 2008-11-25 22:32:49

QNo.4507254

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

ANo.2

すいません。
あまり掲示板をチェックしてないので、返信遅れました。

-------------------------------------------------
サンプルコードは、全角スペースを利用しております。
全角スペース1個→半角スペース2個に置換
する必要があります。
-------------------------------------------------

別端末なのですね?
スクリプトを実行する端末がA、操作対象がBであるとき、Aで操作するユーザがBの端末に対し、Administrators権限が必要となります。
B端末に実行するユーザを、A端末と同一パスワードであらかじめ設定しなくてはなりません。
もしそれが不可能であれば、Administratorのパスワードを同じにしておき、RunAsコマンドを利用するなりして、別ユーザとして実行するしかありません。
サンプルコードはピリオドとしておりますが、localhostを意味します。必要に応じて定数宣言を変更してください。


それと再起動をするには、終了と開始の間に、状態を取得する必要があります。
Stop/Startのメソッドを発行するオブジェクト事態のステートを見ても状態は変わりません。
再度サービスオブジェクトをその都度捕まえて、サービス状態をチェックする必要があります。


Option Explicit

'端末名かIPアドレス
'ピリオドの場合は、localhostと一緒
'IPアドレスや、端末名を入力
Const DEF_MACHINE  = "."

'再起動を行うサービス
Const DEF_SERVICE  = "Messenger"


Dim l_objWMIService
Dim l_objService

Set l_objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & DEF_MACHINE & "\root\cimv2")

Call MsgBox("停止処理を行います")
For Each l_objService In GetServices()
  Call l_objService.StopService

  Do Until ChkServiceState("Stopped")
    Call WScript.Sleep(100)
  Loop
Next

Call MsgBox("停止処理が完了したので、起動処理を行います")
For Each l_objService In GetServices()
  Call l_objService.StartService

  Do Until ChkServiceState("Running")
    Call WScript.Sleep(100)
  Loop
Next

Call MsgBox("起動処理を終了しました")




'-------------以下は関数--------------------

'関数:サービスオブジェクトの取得
Function GetServices()
  Dim l_strSQL
  l_strSQL = "SELECT * FROM WIN32_SERVICE WHERE Caption = '" & DEF_SERVICE & "'"
  Set GetServices = l_objWMIService.ExecQuery(l_strSQL)
End Function


'関数:サービスの状態取得
Function ChkServiceState(p_Status)
  Dim l_objService

  ChkServiceState = False

  For Each l_objService In GetServices()
    ChkServiceState  = CBool(l_objService.State = p_Status)
  Next
End Function

投稿日時 - 2008-11-29 05:00:09

ANo.1

http://okwave.jp/qa1719902.html
※ Netコマンドを利用
net stop
net start

※WMIを利用
Win32_Service

StopService
StartService
メソッドを発行

参考URL:http://okwave.jp/qa1719902.html

投稿日時 - 2008-11-26 03:47:31

補足

>1050YENさん

ご回答ありがとうございます。
コメントが遅れてしまい大変申し訳ありませんでした。

アドバイスいただいた内容を元にスクリプトを作成しました。(単にネットにあるサンプルからひっぱっただけ)。
しかし、サービス起動⇒サービス停止 の一連の流れを一度に行おうとしたところ(※最終目的は「サービスの再起動を一度に行う」)、↓のように"サービス開始の処理"と"サービス停止の処理"を単につなげただけでは"ステートメントがありません。"と表示され、ダメでした。

'-----------------------------------
'サービスの開始する
'
'-----------------------------------
Option Explicit

Dim QfeSet
Dim Qfe
Dim Locator
Dim Service

Set Locator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set Service = Locator.ConnectServer
Set QfeSet = Service.ExecQuery("Select * From Win32_Service Where Name='Messenger'")

For Each Qfe In QfeSet
Qfe.StartService()
Next

Set QfeSet = Nothing
Set Qfe = Nothing
Set Service = Nothing
Set Locator = Nothing
'-----------------------------------
'サービスの停止する
'
'-----------------------------------
Option Explicit

Dim QfeSet
Dim Qfe
Dim Locator
Dim Service

Set Locator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set Service = Locator.ConnectServer
Set QfeSet = Service.ExecQuery("Select * From Win32_Service Where Name='Messenger'")

For Each Qfe In QfeSet
Qfe.StopService()
Next

Set QfeSet = Nothing
Set Qfe = Nothing
Set Service = Nothing
Set Locator = Nothing

ステートメントが特定のアクションを実行または指定する言語エレメント、というところまでわかったのですが、実際にどこをどう修正すればよいのか分かりません。
この二つの処理をつなげる良い方法をご存知でしたら御教示いただけますでしょうか?

よろしくお願いします。

PS:"特定のサービスを再起動させる"VBSファイルは、DHCPサーバからユニーク(実際にはIPレンジが決まっていてユニークではありませんが)なIPアドレスがわりふられているPCの"ALLUSER"のスタートアップに配置したいと考えております。

お教えいただたページ(http://okwave.jp/qa1719902.html)のVBScriptの記述は、ループバックアドレス127.0.0.1(ローカルホスト)を指定しており、今回の条件とあわない?(どこをどう変えればよいかわからない)為、再度質問させていただきました。

長文すいません。

投稿日時 - 2008-11-27 22:01:44

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-