Je souhaite écrire un fichier de commandes qui effectue les opérations suivantes:
- Vérifiez si un service est en cours d'exécution
- S'il est en cours d'exécution, quittez le lot
- S'il n'est pas en cours d'exécution, démarrez le service
Les exemples de code que j'ai recherchés sur Google jusqu'à présent se sont avérés ne pas fonctionner, j'ai donc décidé de ne pas les publier.
Le démarrage d'un service se fait par:
net start "SERVICENAME"
- Comment puis-je vérifier si un service est en cours d'exécution et comment faire une instruction if dans un fichier batch?
- Je suis un peu confus. Quel est l'argument que je dois transmettre au net start? Le nom du service ou son nom d'affichage?
Réponses:
Pour vérifier l'état d'un service, utilisez
sc query <SERVICE_NAME>
. Pour si des blocs dans des fichiers de commandes, consultez la documentation .Le code suivant vérifiera l'état du service
MyServiceName
et le démarrera s'il n'est pas en cours d'exécution (le bloc if sera exécuté si le service n'est pas en cours d'exécution):Explication de ce qu'il fait:
Quant à votre deuxième question, l'argument que vous voudrez passer
net start
est le nom du service, pas le nom d'affichage.la source
sc query "SCardSvr"
partir d'une ligne de commande?Pour basculer un service, utilisez ce qui suit;
la source
||
est en fait unOR
opérateur, même si dans ce cas c'est fonctionnellement uneELSE
instruction. C'est une différence subtile mais importante. J'ai toujours mon +1 - Je fais cela tout le temps dans les scripts shell Unix / Linux, je ne sais pas pourquoi je n'ai jamais pensé à faire cela dans Windows batch.Vous pouvez utiliser la commande suivante pour voir si un service est en cours d'exécution ou non:
Lorsque je l'exécute pour mon antivirus NOD32, j'obtiens:
S'il était arrêté, j'aurais:
Vous pouvez l'utiliser dans une variable pour déterminer ensuite si vous utilisez NET START ou non.
Le nom du service doit être le nom du service, pas le nom d'affichage.
la source
Ça devrait le faire:
la source
Version indépendante de la langue.
la source
Set ServiceName=Jenkins
parSet ServiceName=%~1
et appelez-le commewatch-service.bat "Jenkins"
Je viens de trouver ce fil et je voulais ajouter à la discussion si la personne ne veut pas utiliser un fichier batch pour redémarrer les services. Dans Windows, il existe une option si vous allez dans Services, propriétés du service, puis récupération. Ici, vous pouvez définir les paramètres du service. Aime redémarrer le service si le service s'arrête. En outre, vous pouvez même demander à une deuxième tentative d'échec de faire quelque chose de différent, comme pour redémarrer l'ordinateur.
la source
Pour utiliser Windows en espagnol, el código debe quedar asi (lorsque vous utilisez Windows en espagnol, le code est):
Reemplazar MYSERVICE con el nombre del servicio que se desea procesar. Puedes ver el nombre del servicio viendo las propiedades del servicio. (Remplacez MYSERVICE par le nom du service à traiter. Vous pouvez voir le nom du service dans les propriétés du service.)
la source
la source
Pour Windows Server 2012, voici ce qui a fonctionné pour moi. Remplacez uniquement "SERVICENAME" par le nom réel du service:
la source
Je voulais aussi qu'un e-mail soit envoyé si le service était démarré de cette façon, alors j'ai ajouté un peu au code @Ic, je pensais simplement que je le publierais au cas où cela aiderait quelqu'un. J'ai utilisé SendMail mais il existe d'autres options de ligne de commande Comment envoyer un simple e-mail à partir d'un fichier batch Windows?
la source
Démarrage du service à l'aide du script Powershell. Vous pouvez le lier au planificateur de tâches et le déclencher à intervalles ou au besoin. Créez-le en tant que fichier PS1, c'est-à-dire avec l'extension PS1, puis laissez ce fichier être déclenché à partir du planificateur de tâches.
Pour démarrer le service d'arrêt
dans le planificateur de tâches si vous l'utilisez sur le serveur, utilisez ceci dans les arguments
-noprofile -executionpolicy bypass -file "C: \ Service Restart Scripts \ StopService.PS1"
vérifiez en exécutant la même chose sur cmd si cela fonctionne, cela devrait également fonctionner sur le planificateur de tâches
la source
la source
Lié à la réponse de @DanielSerrano, j'ai été récemment peu par la localisation de la
sc.exe
commande, à savoir en espagnol. Ma proposition est de localiser la ligne et le jeton qui contient l'état de service numérique et de l'interpréter, ce qui devrait être beaucoup plus robuste:Testé avec:
la source
Peut-être d'une manière beaucoup plus simple? Il suffit d'ajouter à la liste des réponses ici:
la source