Faire un Ping et l'exploiter

Faire un Ping et l'exploiter - VB/VBA/VBS - Programmation

Marsh Posté le 29-11-2005 à 15:09:13    

Salut à Tous J'essaye d'effectuer un PING sur des Machines et d'exploite le resultat pour contniuer mon programme ou marque dans un fichier texte si le poste est eteint  
probleme je n'arrive pas a recuperer le resultat et l'exploité ( en VBS )
 
'verification de la connection au poste'
 
function PingCheck
set WshShell = CreateObject ("Wscript.shell" )
PING = WshShell.Run ("Ping.exe POTES" & 0,TRUE)
if PING = 0 then call WriteOPOFF end if
End function
 
function writeOPOFF
set WshShell = CreateObject ("Wscript.shell" )
Set f = fso.GetFile(OPOFF)
Set ts = f.OpenAsTextStream(8, -2)
ts.Write TARGET
ts.close
End Function

Reply

Marsh Posté le 29-11-2005 à 15:09:13   

Reply

Marsh Posté le 29-11-2005 à 15:31:45    

PeEtreDieu a écrit :

Salut à Tous J'essaye d'effectuer un PING sur des Machines et d'exploite le resultat pour contniuer mon programme ou marque dans un fichier texte si le poste est eteint  
probleme je n'arrive pas a recuperer le resultat et l'exploité ( en VBS )


Salut  :hello:  
 
J'ai l'impression que c'est une simple erreure de syntaxe :
 
Si je reduis ton code à ceci
 

set WshShell = CreateObject ("Wscript.shell" )
PING = WshShell.Run("Ping.exe POTES", 0,TRUE)
Msgbox "Resultat du PING " & PING


Ca marche tres bien, la MsgBox affiche 1 pour une adresse invalide, 0 pour une adresse ayant répondu.
 
il y avait juste le & a remplacer par ,
 
La syntaxe de Run est :

object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])


---------------
Mieux vaut fermer sa gueule et passer pour un con, plutot que de l'ouvrir, et montrer qu'on l'est...
Reply

Marsh Posté le 30-11-2005 à 10:08:24    

Merci  
Trop bete une si petite fautes lol
merci

Reply

Marsh Posté le 30-11-2005 à 10:19:10    

En faites sa ne marche pas
il me renvoie toujour un 1
je comprends pas !!!!

Reply

Marsh Posté le 30-11-2005 à 11:30:46    

PeEtreDieu a écrit :

En faites sa ne marche pas
il me renvoie toujour un 1
je comprends pas !!!!


J'ai vérifié, le script que je t'ai donné fonctionne bien sur un W2K.
Fais un test en remplaçant le nom POTES par une @ IP histoire d'être sur que tu n'as pas un pb de résolution de nom, par ex :

PING = WshShell.Run("Ping.exe 127.0.0.1", 0,TRUE)


Essaie avec un bête copier coller de mon script, ça isolera une éventuelle coquille oubliée quelque part.


---------------
Mieux vaut fermer sa gueule et passer pour un con, plutot que de l'ouvrir, et montrer qu'on l'est...
Reply

Marsh Posté le 30-11-2005 à 14:25:06    

J'ai trouver en faites il ne faut pas que je la mette dans une fonction
si je retire la fonction cela marhe avec non
peut etre que je declare mal  

Reply

Marsh Posté le 30-11-2005 à 14:57:18    

NON en faites le probleme vient de la variable je pe pas placer une variable entre " " sa ne marche pas alors coment faire je ne sais pas
 
a chaque fois il prend la valeur POTES
donc il fait un PING POTES
lol
c'est tt a fai se que je ve
mais il fau absolument qu'il ping et prennent la valeur de la variable et non le nom POTE

Reply

Marsh Posté le 01-12-2005 à 13:54:11    

Le problème c'est qu'en DOS la commande "ping" ne retourne pas une erreur si la machine ne répond pas. Par contre elle retourne une erreur si la résolution de nom échoue.
Fais un  

C:\ > ping 127.0.0.1
...  (on est sur que ça répond)
...
...
C:\ > echo %errorlevel%
0


maintenant, supposons que l'adresse 192.168.0.250 n'existe pas dans ton réseau

C:\ > ping 192.168.0.250
Request timed out
Request timed out
Request timed out
Request timed out
C:\ > echo %errorlevel%
0


La commande ping ne retourne en errorlevel que sa capacité à s'executer, non le resultat du ping
 
il faut donc trouver un subterfuge pour contourner le problème


---------------
Mieux vaut fermer sa gueule et passer pour un con, plutot que de l'ouvrir, et montrer qu'on l'est...
Reply

Marsh Posté le 01-12-2005 à 14:33:13    

L'astuce consiste à trouver dans les réposes retournées un mot clé permettant de déterminer si la machine pépond
 
il faut envisager les cas suivants :
la machine répond
la machine ne répond pas
la passerelle répond que l'hote est injoignable...
 
Cette dernière possibilité interdit de chercher le mot "Reply"
On peut donc chercher le mot "bytes=" qui n'apparait que dans le cas d'une réponse
La commande DOS a faire est donc :

ping.exe POTES | find /I "bytes="

ce qui pose un gros problème :
il faut passer en paramètre les caractères "guillemet" sans qu'ils soient interprétés. On passe alors leur code ASCI : 34
Deuxième problème : le caractère | n'est pas connu de schell.run. Il faut donc passer par un shell DOS pour pouvoir l'utiliser :
cmd /c ping.exe ... | find ...
 
Au final ça donne :
 

POTES="lluxstse6999"
  set WshShell = CreateObject ("Wscript.shell" )
  PINGIT="cmd /c ping.exe " & POTES & " | find /I " & CHR(34) & "bytes=" & CHR(34)
  PING = WshShell.Run(PINGIT,1,TRUE)
Msgbox "Resultat du Ping = " & PING


Je crois que là on est bon.  :hello:  


---------------
Mieux vaut fermer sa gueule et passer pour un con, plutot que de l'ouvrir, et montrer qu'on l'est...
Reply

Marsh Posté le 01-12-2005 à 15:08:13    

merci beaucoup

Reply

Sujets relatifs:

Leave a Replay

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