Réponses:
L’affiche veut s’assurer que le service est arrêté avant d’essayer de le redémarrer. Vous pouvez utiliser une boucle sur le résultat de "sc query" en procédant comme suit:
: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
Dead simple avec powershell:
PS >Restart-Service MySrvcHere
Encore mieux, en utilisant les noms d'affichage:
PS >Restart-Service -displayname "My Service Name Here"
Get-Help Restart-Service
pour plus
S'il s'agit uniquement de redémarrer le service, vous pouvez utiliser
Net stop myservice
Net start myservice
Toutefois, 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.
sc stop myservice
enverra simplement la commande stop et reviendra avant que le service ne soit arrêté. Appeler sc avec start / b ne vous aidera pas.
Pour que le redémarrage silencieux d’un service 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
Cela serait utile pour l'exécution automatique de scripts.
Si vous souhaitez redémarrer un service en échec, vous n'avez pas besoin d'exécuter de script. Dans le composant logiciel enfichable MMC des services, cliquez avec le bouton droit de la souris sur un service, sélectionnez Propriétés, cliquez sur l'onglet 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 aurez 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 par net stop "myserviceshortname"
et terminez parnet 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 comment démarrer 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