Script pour lancer un programme si le ping ne répond plus

Script pour lancer un programme si le ping ne répond plus - Shell/Batch - Programmation

Marsh Posté le 08-12-2010 à 12:06:26    

Bonjour,
 
Je viens solliciter votre aide   :)  
 
Le titre du sujet résume le but de mon programme : exécuter un .exe si le ping d'une machine ne répond plus.
 
Mon problème est au niveau de la boucle que je n'arrive pas à créer.
 
Le .bat fonctionne pour le test du ping et l'exécution du programme mais j'aimerai le rentrer dans une boucle pour que le programme se lance une fois que le ping ne répond plus.
 
Voici la ou j'en suis :
 
@echo off
echo test de la connexion de 192.168.201.146
ping -n 2 192.168.201.146
echo %errorlevel%
if errorlevel 1 goto erreur
goto fin
:erreur
cd C:\Users\sebastien\Desktop\Dartfish\
test.exe
:fin
echo on
exit
 
Et ce que je souhaiterai avoir :
 
Tant que ping 192.168.201.146 répond ne rien faire
quand ping 192.168.201.146 ne répond plus
Lancer C:\Users\sebastien\Desktop\Dartfish\test.exe
 
Si vous avez qq conseils
 
Merci

Reply

Marsh Posté le 08-12-2010 à 12:06:26   

Reply

Marsh Posté le 08-12-2010 à 14:26:14    

Est-ce que ce lien repond à ta question : http://www.hotline-pc.org/batch.htm
 
Par contre, il va falloir faire attention a ne pas saturer ta machine, et lancer une commande sleep a chaque itération pour mettre ton programme en pause pendant quelques secondes


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 08-12-2010 à 14:34:03    

Merci pour les conseils avec sleep, je vais lire ca pour trouver une solution.

Reply

Marsh Posté le 08-12-2010 à 15:00:02    

Voila ca fonctionne avec ce programme :  
 
@echo off  
echo test de la connexion de 192.168.201.146  
:testping
ping -n 2 192.168.201.146  
echo %errorlevel%  
if errorlevel 1 goto erreur  
goto testping
:erreur  
cd C:\Users\sebastien\Desktop\Dartfish\  
test.exe  
echo on  
exit  
 
Il reste cependant un problème.
 
Quand je débranche le PC pour activer l'alerte je me retrouve avec 2 cas :
 
1. "Délai d'attente de la demande dépassé." => %errorlevel% prend bien la valeur de 1 et mon .exe s’exécute donc tout est ok.
 
2. "Réponse de 192.168.201.122 : Impossible de joindre l'hôte de destination." => La par contre le %errorlevel% prend la valeur 0 donc la boucle continue alors que le ping vers 192.168.201.146 ne répond plus.
Le .exe ne s’exécute pas alors qu'il faudrait qu'il se lance.
 
J'aimerai savoir si vous avez un moyen pour que %errorlevel% prenne la valeur de 1 que l'on soit dans le cas 1. ou bien dans le cas 2. ou si vous savez pourquoi de facon aléatoire j'obtiens le cas1 ou le cas 2.
 
Si vous avez d'autres suggestions n'hésitez pas.  
 
Merci


Message édité par seb06bes le 08-12-2010 à 16:30:07
Reply

Marsh Posté le 09-12-2010 à 11:04:40    

Pas d'idées ?

Reply

Marsh Posté le 09-12-2010 à 13:29:06    

Faire une sorte de grep sur la sortie?


---------------
Seul Google le sait...
Reply

Marsh Posté le 09-12-2010 à 14:56:59    

Utiliser les fichiers .bat est la méthode ancienne pour faire des batchs.
Mais, depuis Windows 95, il existe les fichiers .vbs qui permettent de faire plus de choses et plus simplement.
 
Pour le ping, Microsoft donne la solution avec le script vbs suivant

Set objShell = WScript.CreateObject("WScript.Shell" )
Set objExecObject = objShell.Exec("cmd /c ping -n 3 -w 1000 157.59.0.1" )
Do While Not objExecObject.StdOut.AtEndOfStream
    strText = objExecObject.StdOut.ReadLine()
    If Instr(strText, "Reply" ) > 0 Then
        Wscript.Echo "Reply received."
        Exit Do
    End If
Loop

(source http://technet.microsoft.com/fr-fr [...] n-us).aspx )


Message édité par olivthill le 09-12-2010 à 14:57:20
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed