it-swarm-id.com

Bagaimana cara memulai kembali layanan Windows dari skrip?

Saya memiliki skrip batch yang terlihat seperti:

sc stop myservice
sc start myservice

kesalahan karena sc tidak menunggu sampai layanan dihentikan. Bagaimana cara memulai kembali layanan dengan skrip?

38
Joshua

Poster ingin memastikan layanan dihentikan sebelum mencoba untuk memulainya kembali. Anda dapat menggunakan loop pada output "sc query" melakukan sesuatu seperti ini:

: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

Mungkin melewatkan sesuatu, tapi saya menggunakan ini sepanjang waktu:

berhenti bersih "layanan saya"
mulai bersih "layanan saya"

atau lebih pendek:

berhenti bersih "layanan saya" & & mulai bersih "layanan saya"

26
Skawt

Mati sederhana dengan PowerShell:

PS >Restart-Service MySrvcHere

Lebih baik lagi, menggunakan nama tampilan:

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

Get-Help Restart-Service untuk lebih

24
Factor Mystic

Jika ini murni untuk memulai kembali layanan, Anda dapat menggunakannya

Net stop myservice
Net start myservice

Namun, jika Anda ingin akses ke opsi sc, Anda dapat menggunakan perintah mulai/tunggu

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

teknik ini adalah solusi yang lebih umum yang dapat diterapkan pada perintah apa pun.

6
Peter Stuer

Untuk memiliki sunyi restart dari beberapa layanan, yang meminta konfirmasi untuk dihentikan (seperti layanan Server, misalnya), Anda dapat menambahkan / y ke akhir perintah berhenti.

net stop Server /y
net start Server

Akan sangat membantu untuk eksekusi skrip otomatis.

5
Fedir RYKHTIK

Jika Anda ingin memulai kembali layanan yang gagal, Anda tidak perlu menjalankan skrip. Di layanan MMC snapin klik kanan pada layanan, pilih properti, klik tab pemulihan. Di sini Anda dapat mengatur tindakan apa yang ingin Anda ambil jika layanan berhenti. Ada banyak fleksibilitas yang tersedia. Anda akan membutuhkan skrip jika Anda mencoba menghentikan layanan, melakukan sesuatu kemudian mulai skrip, kata pengantar file batch dengan net stop "myserviceshortname" dan diakhiri dengan net start "myserviceshortname"

Di vbscipt itu adalah kode yang lebih sedikit untuk menghentikan layanan dan tanggungannya:

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

Inilah yang memulai layanan dan apa pun itu tergantung (ini harus akrab)

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

Anda dapat menggunakan perintah berikut:

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