回答:
投稿者は、サービスを再起動する前にサービスが停止していることを確認したいと考えています。「sc query」の出力でループを使用すると、次のようなことができます。
:stop
sc stop myservice
rem cause a ~10 second sleep before checking the service state
ping 127.0.0.1 -n 10 -w 1000 > nul
sc query myservice | find /I "STATE" | find "STOPPED"
if errorlevel 1 goto :stop
goto :start
:start
net start | find /i "My Service">nul && goto :start
sc start myservice
Powershellで非常にシンプル:
PS >Restart-Service MySrvcHere
さらに良いことに、表示名を使用します。
PS >Restart-Service -displayname "My Service Name Here"
Get-Help Restart-Service
多くのための
サービスを再起動するだけの場合は、次を使用できます。
Net stop myservice
Net start myservice
ただし、scのオプションにアクセスする場合は、start / waitコマンドを使用できます
start /B /WAIT CMD /C "sc stop myservice"
start /B /WAIT CMD /C "sc start myservice"
この手法は、任意のコマンドに適用できるより一般的なソリューションです。
sc stop myservice
停止コマンドを送信し、サービスが停止する前に戻ります。start / bを指定してscを呼び出しても役に立ちません。
確認の停止を要求するサービス(たとえば、サーバーサービスとして)を静かに再起動するには、停止コマンドの最後に/ yを追加します。
net stop Server /y
net start Server
自動スクリプト実行に役立ちます。
失敗したサービスを再起動する場合は、スクリプトを実行する必要はありません。サービスMMCスナップインで、サービスを右クリックし、プロパティを選択して、回復タブをクリックします。ここでは、サービスが停止した場合に実行するアクションを設定できます。多くの柔軟性があります。サービスを停止する場合はスクリプトが必要になります。何かをしてからスクリプトを開始し、バッチファイルの前net stop "myserviceshortname"
にnet start "myserviceshortname"
vbsciptでは、サービスとその依存関係を停止するためのもう少しのコードがあります。
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery("Associators of " _
& "{Win32_Service.Name='myservice'} Where " _
& "AssocClass=Win32_DependentService " & "Role=Antecedent" )
For each objService in colServiceList
objService.StopService()
Next
Wscript.Sleep 20000
Set colServiceList = objWMIService.ExecQuery _
("Select * from Win32_Service where Name='myservice'")
For each objService in colServiceList
errReturn = objService.StopService()
Next
ここでは、サービスとそれが依存するものを開始します(これはおなじみのはずです)
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery _
("Select * from Win32_Service where Name='Myservice'")
For each objService in colServiceList
errReturn = objService.StartService()
Next
Wscript.Sleep 20000
Set colServiceList = objWMIService.ExecQuery("Associators of " _
& "{Win32_Service.Name='myservice'} Where " _
& "AssocClass=Win32_DependentService " & "Role=Dependent" )
For each objService in colServiceList
objService.StartService()
Next