Comment puis-je script une batte ou cmd pour arrêter et démarrer un service de manière fiable avec vérification des erreurs (ou me faire savoir qu'il n'a pas réussi pour une raison quelconque)?
288
Comment puis-je script une batte ou cmd pour arrêter et démarrer un service de manière fiable avec vérification des erreurs (ou me faire savoir qu'il n'a pas réussi pour une raison quelconque)?
Réponses:
Utilisez la commande
SC
(contrôle de service), elle vous offre beaucoup plus d'options que simplementstart
&stop
.la source
et
vous dire s'ils ont réussi ou échoué assez clairement. Par exemple
Si vous exécutez à partir d'un fichier de commandes, vous avez accès au NIVEAU D'ERREUR du code retour. 0 indique le succès. Une valeur plus élevée indique une défaillance.
En tant que fichier de chauve - souris,
error.bat
:La sortie ressemble à ceci:
Codes de retour
Modifier 20.04.2015
Codes de retour:
Regardez ici: http://ss64.com/nt/net_service.html
la source
NET
n'est pas seulement pour les fonctions liées au service alors qu'ilSC
est juste pour les fonctions liées au service.errorlevel
retour est 2, voyez ici comment interpréter le résultat de l'erreur .Vous pouvez utiliser la commande NET START puis vérifier la variable d'environnement ERRORLEVEL, par exemple
Avertissement: j'ai écrit cela du haut de ma tête, mais je pense que cela fonctionnera.
la source
Au lieu de vérifier les codes, cela fonctionne aussi
la source
J'ai créé mon fichier batch personnel pour cela, le mien est un peu différent mais n'hésitez pas à le modifier comme bon vous semble. J'ai créé cela il y a peu de temps parce que je m'ennuyais et que je voulais proposer aux gens un moyen simple de saisir la fin, le démarrage, l'arrêt ou le réglage sur auto. Ce fichier BAT vous demande simplement d'entrer le nom du service et il fera le reste pour vous. Je ne savais pas qu'il cherchait quelque chose qui indiquait une erreur, j'ai dû mal lire cette partie. Bien que cela puisse généralement être fait en saisissant >> output.txt à la fin de la ligne.
Le% var% est juste un moyen pour l'utilisateur de pouvoir y entrer son propre service, au lieu d'avoir à modifier le fichier bat à chaque fois que vous voulez démarrer / arrêter un service différent.
Si je me trompe, n'importe qui peut se sentir libre de me corriger à ce sujet.
la source
Utiliser les codes retour de
net start
etnet stop
me semble être la meilleure méthode. Essayez ceci: Codes de retour Net Start .la source
La syntaxe m'a toujours .... alors ...
Voici explicitement comment ajouter une ligne à un fichier de commandes qui tuera un service distant (sur une autre machine) si vous êtes administrateur sur les deux machines, exécutez le .bat en tant qu'administrateur et les machines sont sur le même domaine. Le nom de la machine suit le format UNC \ myserver
Dans ce cas ... p4_1 était à la fois le nom du service et le nom d'affichage lorsque vous affichez les propriétés du service dans Service Manager. Vous devez utiliser le nom du service.
Pour vos accros Service Ops ... assurez-vous d'ajouter votre code de raison et de commenter! c'est-à-dire '4' qui est égal à 'Planifié' et commentaire 'Arrêt du serveur pour maintenance'
la source
CMD
tant que l'autre utilisateur / ID en faisantrunas /user:Domain\UserName cmd
puis entrez votre mot de passe. CMD commencera à s'exécuter en tant que compte d'utilisateur spécifié.Nous aimerions penser que "net stop" arrêtera le service. Malheureusement, la réalité n'est pas si noire et blanche. Si le service met longtemps à s'arrêter, la commande revient avant l'arrêt du service. Cependant, vous ne le saurez pas, sauf si vous vérifiez le niveau d'erreur.
La solution semble être de boucler en rond à la recherche de l'état du service jusqu'à ce qu'il soit arrêté, avec une pause à chaque tour de boucle.
Mais encore une fois...
Je constate que le premier service prend beaucoup de temps à s'arrêter, puis le «net stop» pour un service ultérieur semble ne rien faire. Regardez le service dans le gestionnaire de services, et son état est toujours "Démarré" - aucun changement à "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.
la source
ou vous pouvez démarrer le service à distance avec cette cmd:
sc \\<computer> start <service>
la source
J'ai juste utilisé l'exemple de Jonas ci-dessus et créé une liste complète de 0 à 24 niveaux d'erreur. Les autres articles sont corrects
net start
etnet stop
n'utilisent queerrorlevel
0 pour le succès et 2 pour l'échec.Mais c'est ce qui a fonctionné pour moi:
Passez
stop
àstart
et fonctionne à l'envers.la source
Le redémarrage manuel du service est correct - services.msc a le bouton "Redémarrer", mais en ligne de commande les commandes sc et net n'ont pas de commutateur "redémarrer" et si le redémarrage est planifié dans le fichier cmd / bat, le service est arrêté et démarré immédiatement, parfois il obtient une erreur car le service n'est pas encore arrêté, il a besoin de temps pour arrêter les choses.
Cela peut générer une erreur: sc stop sc start
C'est une bonne idée d'insérer un timeout, j'utilise ping (ça sonne toutes les 1 secondes): sc stop ping localhost -n 60 sc start
la source
Voici la commande Windows 10 pour démarrer la restauration du système à l'aide d'un lot:
Vous pouvez également aimer ces commandes:
Modifier la valeur de Registre pour démarrer automatiquement la restauration du système
REG ADD "HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ SystemRestore" / v DisableSR / t REG_DWORD / d 0 / f
Créer un point de restauration système
Wmic.exe / Namespace: \ root \ default Path SystemRestore Appelez CreateRestorePoint "djibe a sauvé votre PC", 100, 12
Modifier l'utilisation du disque de la restauration du système
vssadmin resize shadowstorage / for = C: / on = C: / maxsize = 10%
Prendre plaisir
la source
SC
peut tout faire avec les services ... démarrer, arrêter, vérifier, configurer et plus encore ...la source
Parfois, vous pouvez trouver l'arrêt ne fonctionne pas ..
Mon SQlServer fait parfois cela. L'utilisation de la ligne de commande suivante le tue. Si vous avez vraiment vraiment besoin de votre script pour tuer des trucs qui ne s'arrêtent pas. Je le ferais en dernier recours
la source
J'écris un service Windows en C #, la boucle stop / uninstall / build / install / start est devenue trop fatigante. A écrit un mini script, l'a appelé
reploy.bat
et déposé dans mon répertoire de sortie Visual Studio (celui qui a l'exécutable du service intégré) pour automatiser la boucle.Réglez simplement ces 3 vars
servicename
: cela apparaît sur le panneau de configuration du service Windows (services.msc)slndir
: dossier (pas le chemin complet) contenant votre fichier de solution (.sln)binpath
: chemin complet (pas le chemin du dossier) vers l'exécutable du service à partir de la buildREMARQUE: cela doit être exécuté à partir de la ligne de
msbuild
commande de Visual Studio Developer pour que la commande fonctionne.Peut-être que cela aide quelqu'un :)
la source