web-dev-qa-db-fra.com

Comment redémarrer un service Windows à partir d'un script?

J'ai un script batch qui ressemble à:

sc stop myservice
sc start myservice

il fait une erreur car sc n'attend pas que le service soit arrêté. Comment redémarrer un service avec un script?

38
Joshua

L'affiche souhaite s'assurer que le service est arrêté avant d'essayer de le redémarrer. Vous pouvez utiliser une boucle sur la sortie de la "requête sc" en faisant quelque chose comme ceci:

: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

Il manque peut-être quelque chose, mais je l'utilise tout le temps:

arrêt net "myservice"
net start "myservice"

ou plus court:

net stop "myservice" && net start "myservice"

26
Skawt

Dead simple avec PowerShell:

PS >Restart-Service MySrvcHere

Encore mieux, en utilisant des noms d'affichage:

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

Get-Help Restart-Service pour plus

24
Factor Mystic

S'il s'agit uniquement de redémarrer le service, vous pouvez utiliser

Net stop myservice
Net start myservice

Cependant, si vous souhaitez accéder aux options de sc, vous pouvez utiliser la commande start/wait

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

cette technique est une solution plus générale qui peut être appliquée à n'importe quelle commande.

6
Peter Stuer

Pour avoir silencieux redémarrage d'un service, qui demande l'arrêt des confirmations (en tant que service Serveur, par exemple), vous pouvez ajouter / y à la commande de fin d'arrêt.

net stop Server /y
net start Server

Il serait utile pour l'exécution automatique de script.

5
Fedir RYKHTIK

Si vous souhaitez redémarrer un service ayant échoué, vous n'avez pas besoin d'exécuter un script. Dans les services MMC snapin, cliquez avec le bouton droit sur un service, sélectionnez les propriétés, cliquez sur l'onglet de récupération. Ici, vous pouvez définir les actions que vous souhaitez entreprendre si le service s'arrête. Il y a beaucoup de flexibilité disponible. Vous aura besoin d'un script si vous essayez d'arrêter le service, faites quelque chose puis démarrez le script, faites précéder le fichier de commandes avec net stop "myserviceshortname" et se terminent par net start "myserviceshortname"

Dans vbscipt, c'est un peu plus de code pour arrêter un service et ses dépendants:

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

Voici le démarrage d'un service et tout ce dont il dépend (cela devrait être familier)

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

Vous pouvez utiliser les commandes suivantes:

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