41 votes

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

J'ai un script batch qui ressemble à ceci :

sc stop myservice
sc start myservice

il renvoie une erreur car sc ne attend pas que le service soit arrêté. Comment puis-je redémarrer un service avec un script ?

3voto

Rob Howard Points 636

Si vous souhaitez redémarrer un service qui a échoué, vous n'avez pas besoin d'exécuter un script. Dans la console MMC des services, faites un clic droit sur un service, sélectionnez les propriétés, cliquez sur l'onglet récupération. Vous pouvez ici définir les actions à prendre 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, de faire quelque chose, puis de démarrer le script, commencez le fichier batch avec net stop "myserviceshortname" et terminez avec net start "myserviceshortname"

En vbscipt il y a un peu plus de code pour arrêter un service et ses dépendances:

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 (ceci 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

1voto

Ganesh Points 21

Vous pouvez utiliser les commandes suivantes:

@echo off
sc Stop 
timeout 30
sc start

0voto

J'ai créé un hybride : dans le fichier *.cmd :

powershell -Command "& {Restart-Service MyService;}"

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X