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) ?
Réponses
Trop de publicités?J'ai juste utilisé l'exemple de Jonas ci-dessus et créé une liste complète de 0 à 24 niveaux d'erreur. L'autre publication a raison que net start
et net stop
n'utilisent que errorlevel
0 pour le succès et 2 pour l'échec.
Mais voici ce qui a fonctionné pour moi:
net stop postgresql-9.1
if %errorlevel% == 2 echo Accès refusé - Impossible d'arrêter le service
if %errorlevel% == 0 echo Service arrêté avec succès
echo Niveau d'erreur: %errorlevel%
Changer stop
en start
et fonctionne à l'inverse.
Le redémarrage manuel du service est OK - services.msc possède un bouton "Redémarrer", mais en ligne de commande, les commandes sc et net ne disposent pas d'un interrupteur "restart" et si le redémarrage est programmé dans un fichier cmd/bat, le service est arrêté et redémarré immédiatement, parfois cela génère une erreur car le service n'est pas encore arrêté, il a besoin de temps pour arrêter correctement.
Cela peut générer une erreur: sc stop sc start
Il est bon d'insérer un délai, j'utilise ping (qui ping toutes les 1 seconde): sc stop ping localhost -n 60 sc start
Voici la commande Windows 10 pour démarrer la Restauration du système en utilisant le batch :
sc config swprv start= Auto
Vous pouvez également aimer ces commandes :
-
Changer la valeur du 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 Call CreateRestorePoint "djibe a sauvegardé votre PC", 100, 12
-
Changer l'utilisation du disque de la Restauration du système
vssadmin resize shadowstorage /for=C: /on=C: /maxsize=10%
Profitez
- SC
- NET STOP/START
- PsService
- WMIC
- Powershell est également facile pour l' option d'utilisation
SC et NET sont déjà donnés comme des options. PsService ajoute des fonctionnalités intéressantes mais nécessite un téléchargement depuis Microsoft.
Mais ma façon préférée est d'utiliser WMIC car la syntaxe WQL offre un moyen puissant de gérer plusieurs services en une seule ligne (les objets WMI peuvent également être utilisés via powershell/vbscript/jscript/c#).
La manière la plus facile de l'utiliser :
wmic service NomDuService appeler StartService
wmic service NomDuService appeler StopService
Un exemple avec WQL
wmic service where "name like '%%32Time%%' and ErrorControl='Normal'" appeler StartService
Cela démarrera tous les services ayant un nom contenant 32Time
et ayant un contrôle d'erreur normal.
Ici sont les méthodes que vous pouvez utiliser.
Avec :
wmic service get /FORMAT:VALUE
vous pouvez voir les informations disponibles sur les services.
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.