it-swarm-vi.com

Làm cách nào để khởi động lại dịch vụ Windows từ tập lệnh?

Tôi có một tập lệnh trông giống như:

sc stop myservice
sc start myservice

nó báo lỗi vì sc không đợi đến khi dịch vụ bị dừng. Làm cách nào để khởi động lại dịch vụ với tập lệnh?

38
Joshua

Người đăng muốn đảm bảo dịch vụ bị dừng trước khi thử khởi động lại. Bạn có thể sử dụng một vòng lặp trên đầu ra của "sc query" để làm một cái gì đó như thế này:

: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
47
crb

Có thể thiếu một cái gì đó, nhưng tôi sử dụng tất cả các thời gian:

dừng mạng "myservice"
[.__.] Bắt đầu "myservice"

hoặc ngắn hơn:

dừng mạng "myservice" && net bắt đầu "myservice"

26
Skawt

Chết đơn giản với powershell:

PS >Restart-Service MySrvcHere

Thậm chí tốt hơn, sử dụng tên hiển thị:

PS >Restart-Service -displayname "My Service Name Here"

Get-Help Restart-Service để biết thêm

24
Factor Mystic

Nếu đó hoàn toàn là để khởi động lại dịch vụ, bạn có thể sử dụng

Net stop myservice
Net start myservice

Tuy nhiên, nếu bạn muốn truy cập vào các tùy chọn của sc, bạn có thể sử dụng lệnh start/Wait

start /B /WAIT CMD /C "sc stop myservice"
start /B /WAIT CMD /C "sc start myservice"

kỹ thuật này là một giải pháp tổng quát hơn có thể được áp dụng cho bất kỳ lệnh nào.

6
Peter Stuer

Để có im lặng khởi động lại một số dịch vụ, yêu cầu dừng xác nhận (ví dụ như dịch vụ Máy chủ), bạn có thể thêm / y vào cuối lệnh dừng.

net stop Server /y
net start Server

Nó sẽ hữu ích cho việc thực thi kịch bản tự động.

5
Fedir RYKHTIK

Nếu bạn muốn khởi động lại một dịch vụ thất bại, bạn không cần phải chạy tập lệnh. Trong các dịch vụ MMC snapin nhấp chuột phải vào dịch vụ, chọn thuộc tính, nhấp vào tab khôi phục. Ở đây bạn có thể đặt hành động bạn muốn thực hiện khi dịch vụ dừng. Có rất nhiều tính linh hoạt. sẽ cần một tập lệnh nếu y ou đang cố gắng dừng dịch vụ, làm một cái gì đó sau đó bắt đầu tập lệnh, mở đầu tập tin bó với net stop "myserviceshortname" và kết thúc bằng net start "myserviceshortname"

Trong vbscipt, cần thêm một chút mã để dừng dịch vụ và 'người phụ thuộc của nó:

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

Đây là bắt đầu một dịch vụ và bất cứ điều gì nó phụ thuộc vào (điều này nên quen thuộc)

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
3
Jim B

Bạn có thể sử dụng các lệnh sau:

@echo off
sc Stop <Name of Agentry Service Here>
timeout 30
sc start <Name of Agentry Service Here>
1
Ganesh