- 締切済み
サービス再起動
-教えて下さい- 【質問】VBScriptで特定のサービスを再起動させることってできますか?可能であれば、その記述を教わりたいです。 【OS】Win2000、WinXP、Vista 【サービス】コンピューターの管理⇒サービスとアプリケーション⇒サービスで表示される(XP)サービス一覧の中の任意のサービス PS:VBScript初心者です。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
すいません。 あまり掲示板をチェックしてないので、返信遅れました。 ------------------------------------------------- サンプルコードは、全角スペースを利用しております。 全角スペース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
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
http://okwave.jp/qa1719902.html ※ Netコマンドを利用 net stop net start ※WMIを利用 Win32_Service で StopService StartService メソッドを発行
補足
>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(ローカルホスト)を指定しており、今回の条件とあわない?(どこをどう変えればよいかわからない)為、再度質問させていただきました。 長文すいません。