312 votes

Arrêter et démarrer un service avec un fichier batch ou cmd ?

Comment puis-je scripter un fichier batch ou cmd pour arrêter et démarrer un service de manière fiable avec vérification des erreurs (ou me prévenir si cela n'a pas réussi pour une raison quelconque) ?

0 votes

Peut-être un peu hors sujet (puisque vous demandez une instruction bat & cmd) mais : PowerShell vous donne beaucoup de contrôle et de retour d'information pour effectuer des actions comme celle-ci.

7voto

ATSiem Points 971

La syntaxe me pose toujours problème.... donc...

Voici explicitement comment ajouter une ligne à un fichier batch qui permettra d'arrêter un service distant (sur une autre machine) si vous êtes administrateur sur les deux machines, exécutez le .bat en tant qu'administrateur et que les machines sont sur le même domaine. Le nom de la machine suit le format UNC \monserveur

sc \\ip.ip.ip.ip stop p4_1

Dans ce cas... p4_1 était à la fois le nom du service et le nom d'affichage, lorsque vous visualisez les propriétés du service dans le Gestionnaire de services. Vous devez utiliser le nom du service.

Pour vos mordus des opérations de service... assurez-vous d'ajouter votre code de raison et votre commentaire ! par exemple '4' qui correspond à 'Planifié' et le commentaire 'Arrêt du serveur pour maintenance'

sc \\ip.ip.ip.ip stop p4_1 4 Arrêt du serveur pour maintenance

1 votes

Comment puis-je faire cela si j'ai besoin d'utiliser un autre identifiant et mot de passe pour me connecter ?

1 votes

Vous exécutez CMD en tant qu'autre utilisateur/ID en effectuant runas /user:NomDomaine\NomUtilisateur cmd puis tapez votre mot de passe. CMD commencera à s'exécuter en tant que compte utilisateur spécifié.

7voto

ZombieSheep Points 18967

Utiliser les codes de retour de net start et net stop me semble être la meilleure méthode. Essayez de jeter un œil à ceci : Codes de retour de Net Start.

2 votes

La page liée n'existe plus. En tant que tel, il s'agit maintenant davantage d'un commentaire.

6voto

Peut-être que cela vous aidera :

SC

NET

5voto

DaveH Points 1

Nous aimerions penser que "net stop" arrêtera le service. Malheureusement, la réalité n'est pas si simple. Si le service prend beaucoup de temps à s'arrêter, la commande renverra avant que le service ne se soit arrêté. Vous ne le saurez pas, cependant, à moins de vérifier errorlevel.

La solution semble être de boucler en recherchant l'état du service jusqu'à ce qu'il soit arrêté, avec une pause à chaque tour de boucle.

Mais d'un autre côté...

Je vois que le premier service prend beaucoup de temps à s'arrêter, puis le "net stop" pour un service ultérieur semble juste ne rien faire. Regardez le service dans le gestionnaire de services, et son état est toujours "Démarré" - pas de changement en "Arrêt". Pourtant, je peux arrêter ce deuxième service manuellement en utilisant le SCM, et il s'arrête en 3 ou 4 secondes.

4voto

GvS Points 28137

Peut-être un peu hors sujet (puisque vous demandez une instruction bat & cmd) mais :

PowerShell vous donne beaucoup de contrôle et de rétroaction pour réaliser des actions comme celle-ci.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X