Faire un Ping et l'exploiter - VB/VBA/VBS - Programmation
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 |
Salut
J'ai l'impression que c'est une simple erreure de syntaxe :
Si je reduis ton code à ceci
set WshShell = CreateObject ("Wscript.shell" ) |
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]) |
Marsh Posté le 30-11-2005 à 10:19:10
ReplyMarsh Posté le 30-11-2005 à 11:30:46
PeEtreDieu a écrit : En faites sa ne marche 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.
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
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
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 |
maintenant, supposons que l'adresse 192.168.0.250 n'existe pas dans ton réseau
C:\ > ping 192.168.0.250 |
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
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" |
Je crois que là on est bon.
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