Comment vérifier si un service est en cours d'exécution via un fichier batch et le démarrer, si elle n'est pas en cours d'exécution?
Je veux écrire un fichier de commandes qui effectue les opérations suivantes:
- Vérifier si un service est en cours d'exécution
- Si est-il en cours d'exécution, quittez le lot
- Si elle n'est pas en cours d'exécution, démarrez le service
Les exemples de code j'ai googlé jusqu'à présent s'est avéré ne pas travailler, j'ai donc décidé de ne pas les poster.
Démarrage d'un service est effectuée par:
net start "SERVICENAME"
- Comment puis-je vérifier si un service est en cours d'exécution, et comment procéder à une instruction if dans un fichier batch?
- Je suis un peu confus. Quel est l'argument que j'ai passer sur le net start? Le nom du service ou de son nom complet?
- Sale programmation: quand la seule chose que vous voulez faire est de démarrer le service s'il n'est pas en cours d'exécution, tapez simplement la commande de démarrage. Si elle n'est pas en marche, il va démarrer le service. Si elle est en cours d'exécution que vous obtenez un message d'erreur mais le service est en cours d'exécution (et ne s'arrête pas). Sale, mais il fonctionne. Toutefois, lorsque vous voulez exécuter d'autres commentaires que si vous avez eu pour démarrer le service, puis définitivement aller avec le nettoyant version de lc.
- Schuetze: Oui, votre objection est correct si le démarrage du service est le seul but. J'ai aussi inclus la journalisation commence et ainsi de suite, donc j'ai collé avec de la solution de la lc.
Vous devez vous connecter pour publier un commentaire.
Pour vérifier l'état d'un service, d'utilisation
sc query <SERVICE_NAME>
. Si les blocs dans des fichiers batch, consultez la documentation.Le code suivant va vérifier le statut du service
MyServiceName
et démarrer si elle n'est pas en cours d'exécution (si le bloc sera exécuté que 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 aurez envie de passer à
net start
est le nom du service, pas le nom d'affichage.sc query "SCardSvr"
à partir d'une ligne de commande?Pour basculer d'un service d'utilisation de celui-ci;
||
est en fait unOR
de l'opérateur, bien que dans ce cas, il est fonctionnellement unELSE
déclaration. C'est une subtile, mais importante différence. Encore eu mon +1 -- je le fais tout le temps sous Unix/Linux, script shell, je ne sais pas pourquoi je n'ai jamais pensé à faire cela, dans Windows lot.Vous pouvez utiliser la commande suivante pour voir si un service est en cours d'exécution ou non:
Quand je le lance pour mon NOD32 Antivirus, j'obtiens:
Si elle a été arrêtée, je voudrais obtenir:
Vous pouvez l'utiliser dans une variable pour ensuite déterminer si vous utilisez la commande NET START ou pas.
Le nom du service devrait être le nom du service, et non pas le nom d'affichage.
Qui devrait le faire:
Indépendante de la langue de la version.
Set ServiceName=Jenkins
avecSet ServiceName=%~1
et de l'appeler commewatch-service.bat "Jenkins"
Je viens de découvrir ce fil et je voulais ajouter à la discussion si la personne ne veut pas utiliser un fichier de commandes pour redémarrer les services. Dans Windows il y a une option si vous accédez aux Services, service de propriétés, puis reprise. Ici, vous pouvez définir des paramètres pour le service. Comme pour redémarrer le service si le service s'arrête. Aussi, vous pouvez même avoir un deuxième échec de tentative de faire quelque chose de différent, comme dans le redémarrage de l'ordinateur.
Cuando se utiliser Windows en Español, el código debe quedar asi (lors de l'utilisation de Windows en espagnol, code):
Reemplazar MYSERVICE con el nombre del servicio que se desea procesar. Puedes ver el nombre del servicio viendo las propiedades del servicio. (Remplacer MYSERVICE avec le nom du service pour être traitées. Vous pouvez voir le nom du service sur les propriétés du service.)
Je voulais aussi un e-mail envoyé si le service est démarré de cette manière donc ajouté un peu de @Ic code juste pensé que je voudrais poster dans le cas où il a aidé 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 de commandes Windows?
Démarrage du Service à l'aide de script Powershell. Vous pouvez les lier au planificateur de tâches et de déclencher à intervalles ou en tant que de besoin.
Créer ce qu'une PS1 fichier c'est à dire le fichier avec l'extension PS1 et laisser ensuite ce fichier à être déclenché à partir du planificateur de tâches.
Pour commencer à arrêter de service
dans le planificateur de tâches si vous l'utilisez sur le serveur de l'utiliser dans des arguments
-noprofile -executionpolicy bypass-fichier "C:\Service Redémarrez Scripts\StopService.PS1"
vérifier en exécutant le même sur cmd si cela fonctionne, il doit travailler sur le planificateur de tâches aussi
Pour Windows server 2012 ci-dessous est ce qui a fonctionné pour moi. Remplacez-la uniquement "SERVICENAME" avec un réel service de nom:
Liée avec la réponse par @DanielSerrano, j'ai récemment été peu par la localisation de la
sc.exe
de commande, à savoir en espagnol. Ma proposition est de pin-point de la ligne et un jeton qui détient numérique service de l'état et de l'interpréter, ce qui devrait être beaucoup plus robuste:Testé avec:
Peut-être un moyen beaucoup plus simple? Juste en ajoutant à la liste des réponses ici: