Démarrer et arrêter un service, soit par lot ou d'un fichier cmd?
Comment puis-je créer un script bat ou cmd pour démarrer et arrêter un service fiable avec la vérification des erreurs (ou de me faire savoir qu'il n'a pas réussi pour quelque raison que ce soit)?
- Peut-être un peu hors-sujet (puisque vous demander de chauve-souris & cmd d'instruction), mais: PowerShell vous donne beaucoup de contrôle et de rétroaction pour faire des actions de ce genre.
Vous devez vous connecter pour publier un commentaire.
Utiliser le
SC
(service de contrôle) de commande, il vous donne beaucoup plus d'options que simplementstart
&stop
.et
vous dire s'ils ont réussi ou échoué assez clairement. Par exemple
Si en cours d'exécution à partir d'un fichier de commandes, vous avez accès à la variable ERRORLEVEL du code de retour. 0 indique la réussite. Quelque chose de plus élevé indique un échec.
Comme un fichier bat,
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
NET
n'est pas juste pour le service, les fonctions liées tandis queSC
est juste pour le service des fonctions connexes.Vous pouvez utiliser la commande NET START, puis vérifier le NIVEAU d'une variable d'environnement, par exemple
Avertissement: j'ai écrit ce à partir du haut de ma tête, mais je pense que ça va marcher.
Au lieu de vérifier les codes, cela fonctionne aussi
J'ai créé mon fichier batch pour cela, le mien est un peu différent mais n'hésitez pas à les modifier comme bon vous semble.
J'ai créé ce un peu tout à l'heure parce que je m'ennuyais et je voulais faire un moyen simple pour les gens à être en mesure à l'entrée en terminant, le démarrage, l'arrêt, ou la mise à automatique. Ce fichier BAT simplement vous demande d'entrer le nom du service et il fera le reste pour vous. Je ne savais pas qu'il était à la recherche de quelque chose qui a déclaré toute erreur, je dois avoir mal lu la partie. Bien qu'en général cela peut être fait par la saisie d' >> output.txt sur la fin de la ligne.
L' %var% est juste un moyen pour l'utilisateur d'être en mesure de saisir leurs propres services dans le présent, au lieu d'avoir à aller 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 sur ce point.
En utilisant les codes de retour de
net start
etnet stop
semble que la meilleure méthode pour moi. Essayez un coup d'oeil à ceci: Net Start codes de retour.Syntaxe obtient toujours moi..... alors...
Ici est explicitement comment ajouter une ligne dans un fichier batch qui va tuer un service distant (sur une autre machine) si vous êtes un 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 \monserveur
Dans ce cas... p4_1 était à la fois le Nom du Service et le Nom d'Affichage, lorsque vous affichez les Propriétés pour le service dans le Gestionnaire de Services. Vous devez utiliser le Nom du Service.
Pour votre Service Ops junkies... assurez-vous d'ajouter votre code de raison et de commenter! c'est à dire '4' qui est 'Prévu' et commentaire d'Arrêt du serveur pour la maintenance"
CMD
que l'autre utilisateur/ID en faisantrunas /user:Domain\UserName cmd
puis entrez votre mot de passe. CMD va commencer à courir tant que le compte d'utilisateur spécifié.Nous aimerions penser que la "net stop" arrête le service. Malheureusement, la réalité n'est pas que noir et blanc. Si le service prend du temps pour s'arrêter, la commande sera de retour avant le service a été arrêté. Vous ne savez pas, cependant, à moins que vous vérifiez errorlevel.
La solution semble être de boucle ronde à la recherche de l'état du service jusqu'à ce qu'il est arrêté, avec une pause le temps de chaque tour de la boucle.
Mais là encore...
Je vais voir le premier service de prendre un temps pour arrêter, puis le "net stop" pour un service ultérieur semble simplement ne rien faire. Regardez le service dans le gestionnaire des services, et son état est toujours "en route" - pas de changement à "Arrêt". Pourtant, je peux arrêter ce second service manuellement à l'aide de la SCM, et il s'arrête en 3 ou 4 secondes.
ou vous pouvez démarrer le service distant avec cette cmd :
sc \\<computer> start <service>
Manuel de redémarrer le service est ok - services.msc a bouton "Restart", mais en ligne de commande les deux sc et des commandes net manque un "redémarrage" de l'interrupteur et si le redémarrage est prévu dans cmd/fichier bat, le service est arrêté et a commencé immédiatement, parfois c'est une erreur, car le service n'est pas encore arrêté, il a besoin de quelque temps pour arrêter les choses.
Cela peut générer une erreur:
sc stop
sc start
C'est une bonne idée pour insérer le délai d'attente, j'ai utiliser la commande ping (il envoie un ping à toutes les 1 seconde):
sc stop
ping localhost -n 60
sc start
J'ai simplement utilisé de Jonas exemple ci-dessus, et a créé la liste complète de 0 à 24 errorlevels. D'autres post est correct que
net start
etnet stop
utiliser uniquementerrorlevel
0 pour la réussite et 2 pour non.Mais c'est ce qui a fonctionné pour moi:
Changement
stop
àstart
et fonctionne dans le sens inverse.Voici le Windows 10 de commande pour lancer la Restauration du Système à l'aide de lot :
Vous aimerez aussi ces commandes :
Modifier la valeur de registre de démarrage automatique de 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 /espace de Noms:\root\Chemin d'accès par défaut SystemRestore Appel CreateRestorePoint "djibe enregistré votre PC", 100, 12
Système de changement de disque de Restauration de l'utilisation de la
vssadmin redimensionner shadowstorage /pour=C: /on=C: /maxsize=10%
Profiter de
SC
peut tout faire avec des services... de démarrer, d'arrêter, de vérifier, de les configurer, et plus...Parfois, vous pouvez trouver le stop ne fonctionne pas..
Mon SQlServer n'est parfois présent. À l'aide de la ligne de commande suivante, il tue. Si vous avez vraiment vraiment besoin de votre script à tuer des trucs qui ne s'arrête pas. Je l'aurais fais cela comme un dernier recours
Je suis en train d'écrire un service windows en C#, le stop/désinstaller/build/installer/début de la boucle est trop fatigant. A écrit un mini script, appelé
reploy.bat
et a chuté dans mon Visual Studio répertoire de sortie (celui qui a construit le service de l'exécutable) pour automatiser la boucle.Juste mis ces 3 vars
servicename
: ce qu'on voit sur le Service Windows du panneau de contrôle (services.msc)slndir
: dossier (pas le chemin d'accès complet) contenant votre solution de (.sln) fichierbinpath
: chemin d'accès complet (pas le chemin d'accès au dossier) pour le service de l'exécutable à partir de la générationREMARQUE: Cette opération doit être exécutée à partir de Visual Studio Développeur de Ligne de Commande pour le
msbuild
commande fonctionne.Peut-être que cela aide quelqu'un 🙂