[Résolu][Basic] Ping vers un serveur avec VBS et Windows

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Grilladou
Membre lOOyal
Membre lOOyal
Messages : 33
Inscription : 07 mars 2021 19:47

[Résolu][Basic] Ping vers un serveur avec VBS et Windows

Message par Grilladou »

Bonjour à tous
J'ai besoin de tester si un serveur est connecté au réseau à partir d'un PC sous windows x64 (c'est imposé). Il me semble que le plus simple est de faire un ping sur une adresse donnée. Je me suis très (très) largement inspiré du code publié par Bernard pour tester un processus https://forum.openoffice.org/fr/forum/v ... 2&p=266837. Le code ci-dessous fonctionne (Libre Office ne plante pas), mais...

Code : Tout sélectionner

Sub TestServeur

Dim  sComputer As String, sServerAdress As String

 sComputer = "."
 sServerAdress = "192.168.1.1"
' sServerAdress = "10.10.10.10"
' sServerAdress = "www.google.fr"

Select Case isServerResponde(sComputer, sServerAdress)
	Case True
		Msgbox "Un ping sur " & sServerAdress & " a réussi"
	Case False
		Msgbox "Un ping sur " & sServerAdress & " est en échec"
	Case Else
		Msgbox "Erreur incohérente"
End Select
End Sub

Function isServerResponde(BYVAL strComputer As String, BYVAL sServerAdress As String) As Boolean

DIM objWMIService As Variant, strWMIQuery As String
Dim sc As Variant, prog As String, blabla As String

sc = CreateObject("ScriptControl")
sc.language = "VBScript"

blabla = "winmgmts:" _
        & "{impersonationLevel=impersonate}!\\"_
            & strComputer & "\root\cimv2"

prog = "SET objWMIService = GETOBJECT(""" & blabla & """)"
sc.ExecuteStatement(prog)
objWMIService = sc.eval("objWMIService")
strWMIQuery = "Select * from Win32_PingStatus where address = '" & sServerAdress & "'"

isServerResponde = (objWMIService.ExecQuery(strWMIQuery).Count > 0)
End Function
Le souci est que la fonction renvoie True systématiquement sans tenir compte de la réalité du ping. Même sur une adresse qui n'existe pas, True est renvoyé. C'est comme si la fonction renvoyait le bon fonctionnement de la commande "Ping" et non son résultat.
Je sais bien que ma question n'est pas dans l'épure des sujets "OpenOffice", car c'est plus du portage de VBA/VBS vers Ooffice, mais si quelqu'un avait un commencement de début de piste, ça m'arrangerait bien.
Un grand merci par avance
Dernière modification par Grilladou le 21 mai 2021 14:39, modifié 1 fois.
LibreOffice 6.4 (obsolète, mais obligé) - Windows 10 x64
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25145
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Basic] Test de ping vers un serveur avec VBS et Windows

Message par Dude »

Salut,

Un ping peut être exécuté par la commande Shell.
Le serveur doit faire quoi ? Héberger des données auxquelles il faut accéder ?
Dans ce cas, se servir du service com.sun.star.ucb.SimpleFileAccess.
Grilladou
Membre lOOyal
Membre lOOyal
Messages : 33
Inscription : 07 mars 2021 19:47

Re: [Basic] Test de ping vers un serveur avec VBS et Windows

Message par Grilladou »

Merci Dude pour tes pistes. Je ne connais pas du tout la commande Shell, mais en cherchant un peu je suis tombé sur tes posts de 2008, 2010 et 2011.

Effectivement, le but est de récupérer des fichiers sur un serveur distant. Je voulais faire la chose en 2 étapes : connexion au serveur, puis présence des fichiers. Le plan B sera de vérifier uniquement les fichiers avec le service com.sun.star.ucb.SimpleFileAccess. Mais ce ne sera qu'un plan B car l'absence des fichiers ne prouve pas que le serveur est bien actif.

Je vais continuer à remonter le courant. Je passerai en résolu si je trouve une solution qui fasse l'affaire.
Un grand merci.
LibreOffice 6.4 (obsolète, mais obligé) - Windows 10 x64
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 623
Inscription : 09 août 2017 22:15

Re: [Basic] Test de ping vers un serveur avec VBS et Windows

Message par Jurassic Pork »

hello,
pour le ping tu peux essayer ceci :

Code : Tout sélectionner

Sub TestPing
adresse="127.0.0.1"
 set WshShell = CreateObject ("Wscript.shell" )
 PINGIT="cmd /c ping.exe -n 1 -i 1 " & adresse & " | find /I " & CHR(34) & "octets=" & CHR(34)
 PING = WshShell.Run(PINGIT,1,TRUE)
 if PING = 0 then
 Msgbox  adresse & " répond"
 else
 Msgbox  adresse & " ne répond pas"
 End if
End Sub
avec le paramètre -n : nombre de ping exécuté ( 1 fois dans l'exemple)
et -i : valeur de timeout ( 1 seconde dans l'exemple)

la commande PINGIT est valable uniquement pour un ping en O.S français (octets=)
Ami calmant, J.P
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
Grilladou
Membre lOOyal
Membre lOOyal
Messages : 33
Inscription : 07 mars 2021 19:47

Re: [Résolu][Basic] Test de ping vers un serveur avec VBS et

Message par Grilladou »

Alors là, génialissime !!!! :bravo: :bravo: C'est exactement ce que je cherchais. J'avais commencé à écrire un bout de code en utilisant la piste de Dude (Shell), mais je ne connaissais pas les possibilités offerte par le pipe. Ton code est hyper efficace et en plus il est élégant par son côté synthétique (j'étais parti vers une redirection vers un fichier avec ">" puis une lecture dudit fichier et enfin sa destruction, bref du lourdingue :D ).
la commande PINGIT est valable uniquement pour un ping en O.S français (octets=)
J'ai regardé le texte renvoyé par la commande "WshShell.Run(PINGIT,1,TRUE)". Je me demande si une recherche de "TTL=" ne permettrait pas une internationalisation (TTL c'est déjà de l'anglais) ?

Pour résumer, un grand merci cher Jurassic Pork.
LibreOffice 6.4 (obsolète, mais obligé) - Windows 10 x64