Machine allumée [Résolu]

dale02 24 Messages postés mercredi 26 mai 2004Date d'inscription 25 mars 2005 Dernière intervention - 11 déc. 2004 à 17:48 - Dernière réponse : ahmedkor 13 Messages postés vendredi 24 janvier 2003Date d'inscription 12 janvier 2010 Dernière intervention
- 6 mars 2006 à 16:10
Bonjour,

J'ai un petit script VBS qui doit me permettre de trouver les machines qui sont allumée dans un domaine.

J'aimerai trouver un script qui me permettrai à partir d'un nom de machine, de pouvoir voir si elle sont allumée ou pas. J'ai tenté le système de ping mais j'arrive pas à pouvoir traité le résultat du ping.

Le domaine est configuré de cette façon: serveur win2000 et pc du réseau win2000. C'est important de signaler car il y a des différences avec win 2003.

Merci d'avance
Afficher la suite 

19 réponses

dale02 24 Messages postés mercredi 26 mai 2004Date d'inscription 25 mars 2005 Dernière intervention - 14 déc. 2004 à 14:06
+3
Utile
Merci bcp, tout marche très bien, merci encor!!!

Voilà le code qui marche:

Dim objExec, objShell, sNomMachine
Set objShell = Wscript.CreateObject("WScript.Shell")
sNomMachine = InputBox("Nom de la machine à pinger ou @IP","Pinger.vbs")
Set objExec = objShell.Exec("Ping " & sNomMachine)
Do While Not objExec.stdout.AtEndOfStream

if InStr(objExec.stdOut.ReadLine,"TTL=")<>0 Then
WSCript.Echo "Machine joignable !!"
Exit Do
End If 
WScript.Echo objExec.StdOut.ReadLine
Loop
Cette réponse vous a-t-elle aidé ?  
barley 107 Messages postés jeudi 28 janvier 2010Date d'inscription 28 janvier 2010 Dernière intervention - 11 déc. 2004 à 18:23
0
Utile
"j'arrive pas à pouvoir traité le résultat du ping."
c'est à dire?
dale02 24 Messages postés mercredi 26 mai 2004Date d'inscription 25 mars 2005 Dernière intervention - 11 déc. 2004 à 18:25
0
Utile
j'aimerai savoir si le ping s'est bien exécuté (c'est a dire que les octes se sont envoyé)
barley 107 Messages postés jeudi 28 janvier 2010Date d'inscription 28 janvier 2010 Dernière intervention - 11 déc. 2004 à 18:27
0
Utile
tu stocke dans un fichier ton résultat de ping

exemple ping XXX.XXX.XXX.XXX > c:\temporaire.txt

ensuite tu regarde au niveau du fichier si tu as "perte 100%"
si oui, pas l'hote
si non, l'hote est present

ensuite tu peux écraser le fichier temporaire

il y a peut etre un probleme que je n'ai pas cerné, si c'est le cas, n'hesite pas
dale02 24 Messages postés mercredi 26 mai 2004Date d'inscription 25 mars 2005 Dernière intervention - 11 déc. 2004 à 18:29
0
Utile
jsutement j'ai essayé des tas de scripts comme celui la!! masi ca marche apprement pas!! Tu sais pas m'aider?
barley 107 Messages postés jeudi 28 janvier 2010Date d'inscription 28 janvier 2010 Dernière intervention - 11 déc. 2004 à 18:31
0
Utile
oki, je vais voir ca...
je vois pas ce qui pourrait ne pas marcher la dedans...
je re
barley 107 Messages postés jeudi 28 janvier 2010Date d'inscription 28 janvier 2010 Dernière intervention - 11 déc. 2004 à 19:08
0
Utile
je crois savoir de quoi ca vient, j'ai testé, en effet, ca marche pas, je pense que c'est parce que vb ne reconnait pas la fonction ping.

tu as essayé un truc comme ca non?
Shell("cmd.exe /c ping " & ip & " > " & fichierdestination)

y a bien une solution, elle est pas très propre, mais je pense que ca marche, j'essaye et si ca marche , je te la donne...
y a surement mieux... donc, à ceux qui lisent... quand on peut éviter de faire ca comme ca, on le fait.
lol
barley 107 Messages postés jeudi 28 janvier 2010Date d'inscription 28 janvier 2010 Dernière intervention - 11 déc. 2004 à 19:28
0
Utile
je viens d'écrire, j'ai pas eu le temps de tester

'module de crenaud76 pour la fonction shellwait qui permet d'attendre la fin de l'execution avant de continuer la lecture du code
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Const STILL_ACTIVE = &H103
Private Const PROCESS_QUERY_INFORMATION = &H400

Public Sub ShellWait(ByVal JobToDo As String)
Dim hProcess As Long, RetVal As Long

hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(JobToDo, vbMinimizedNoFocus))
Do
GetExitCodeProcess hProcess, RetVal
DoEvents
Sleep 100
Loop While RetVal = STILL_ACTIVE
End Sub

Private Sub main()

'A initialisation et variables

Dim textline, objet, objetfichier, fichiersource, ip, test
fichiersource = "c:\test.txt"
ip = "24.67.89.90"
test = 1
'B éxécution de la commande DOS qui écrira le ping dans le fichiersource
ShellWait "cmd.exe /c ping -n 1 " & ip & " > " & fichiersource 'execute commande DOS et stop la suite du programme tant que la commande DOS n'est pas terminée"

'C module de récupération des données du fichier source vers le listbox
'C1 module d'ouverture du fichier
Open fichiersource For Input As #1 ' Ouvre le fichier source.
Do While Not EOF(1) ' Effectue la boucle jusqu'à la fin du fichier source.
Line Input #1, textline ' Lit la ligne dans la variable. If Left(textline, 62) " Paquetsÿ: envoy?s 1, re?us = 0, perdus = 1 (perte 100%)," Then
test = 0
End If
Loop 'relance la boucle des lignes
Close #1 ' Ferme le fichier.

If test = 0 Then
MsgBox "l'ip " & ip & " n'est pas connectée"
Else
MsgBox "l'ip " & ip & " est connectée"
End If

'D module d'effacement du fichier source
Set objet = CreateObject("Scripting.FileSystemObject") ' crée un objet
Set objetfichier = objet.getfile(fichiersource) 'l'objet devient le fichier source
objetfichier.Delete True 'efface et force la suppression du fichier source


End Sub

a voir si ca marche, en plus, je tourne sous xp moi
barley 107 Messages postés jeudi 28 janvier 2010Date d'inscription 28 janvier 2010 Dernière intervention - 11 déc. 2004 à 19:34
0
Utile
c'est bon, sur XP, ca marche
j'espere que c'est bon pour toi aussi...
dale02 24 Messages postés mercredi 26 mai 2004Date d'inscription 25 mars 2005 Dernière intervention - 12 déc. 2004 à 22:03
0
Utile
ca me fait erreur de compilation dés le début
crenaud76 4172 Messages postés mercredi 30 juillet 2003Date d'inscription 9 juin 2006 Dernière intervention - 13 déc. 2004 à 09:17
0
Utile
Voici un bout de code VBS permettant de pinger une machine

Option Explicit

Dim objExec, objShell, sNomMachine
Set objShell = Wscript.CreateObject("WScript.Shell")
sNomMachine = InputBox("Nom de la machine à pinger ou @IP","Pinger.vbs")
Set objExec = objShell.Exec("Ping " & sNomMachine)
Do While Not objExec.stdout.AtEndOfStream
WScript.Echo objExec.StdOut.ReadLine
Loop


A toi de remplacer la ligne "WScript.Echo objExec.StdOut.ReadLine" par un test significatif du succès du ping dans la boucle Do While ... Loop, et tu auras ce que tu cherches, je pense.

Barley < Merci de m'avoir cité en reprenant mon code !!

Christophe R.
dale02 24 Messages postés mercredi 26 mai 2004Date d'inscription 25 mars 2005 Dernière intervention - 13 déc. 2004 à 13:07
0
Utile
Je vais essayer, mais ce que tu m'as donné, je savais déjà le faire lol...

C'est justement dans le traitement de la sortie du ping qu ej'arrive pas lol
crenaud76 4172 Messages postés mercredi 30 juillet 2003Date d'inscription 9 juin 2006 Dernière intervention - 13 déc. 2004 à 14:48
0
Utile
Les lignes renvoyé par Ping comporte une information sur le TTL de la requete ICMP envoyé si celle-ci est réussie. Tu peut donc t'en servir, avec un truc du genre :
If objExec.stdOut.ReadLine Like "*TTL=*" Then
  WSCript.Echo "Machine joignable !!"
  Exit Do
End If

Ces lignes sont à mettre dasn la boucle Do while ... Loop à la place du "WScript.Echo ..."

Christophe R.
dale02 24 Messages postés mercredi 26 mai 2004Date d'inscription 25 mars 2005 Dernière intervention - 13 déc. 2004 à 16:25
0
Utile
je teste cela en rentrant chez moi, merci bcp!!!

Je posterai le tout quand ce sera exécutable
dale02 24 Messages postés mercredi 26 mai 2004Date d'inscription 25 mars 2005 Dernière intervention - 13 déc. 2004 à 20:41
0
Utile
Voilà ce que j'ai mis:

Dim objExec, objShell, sNomMachine
Set objShell = Wscript.CreateObject("WScript.Shell")
sNomMachine = InputBox("Nom de la machine à pinger ou @IP","Pinger.vbs")
Set objExec = objShell.Exec("Ping " & sNomMachine)
Do While Not objExec.stdout.AtEndOfStream

If objExec.stdOut.ReadLine Like "*TTL=*" Then
WSCript.Echo "Machine joignable !!"
Exit Do
End If 

WScript.Echo objExec.StdOut.ReadLine
Loop


Et cela me donne comme erreur

C:\Documents and Settings\damien>cscript "C:\Documents and Settings\damien\Burea
u\essai.vbs"
C:\Documents and Settings\damien\Bureau\essai.vbs(7, 1) Erreur d'exécution Micro
soft VBScript: Sub ou Function non définie
crenaud76 4172 Messages postés mercredi 30 juillet 2003Date d'inscription 9 juin 2006 Dernière intervention - 14 déc. 2004 à 08:35
0
Utile
Une erreur sur le mot-clé "If" !!!!!!
La, t'as un problème !!

Christophe R.
dale02 24 Messages postés mercredi 26 mai 2004Date d'inscription 25 mars 2005 Dernière intervention - 14 déc. 2004 à 11:24
0
Utile
ca je sais, mais peut on m'aider?
crenaud76 4172 Messages postés mercredi 30 juillet 2003Date d'inscription 9 juin 2006 Dernière intervention - 14 déc. 2004 à 11:50
0
Utile
Pardon !! Le Like n'existe pas en vbs.
Remplace le "If .... Then " par "if InStr(objExec.stdOut.ReadLine,"TTL=")<>0 Then"
Ca fonctionne mieux la !!

Christophe R.
ahmedkor 13 Messages postés vendredi 24 janvier 2003Date d'inscription 12 janvier 2010 Dernière intervention - 6 mars 2006 à 16:10
0
Utile
La bonne solution pour vérifier est ce que le PC et allumer au pas c'est PING
Avant tous crier un fichier vide texte « exemple ping.txt »
Te peu pingez mentent sur n'import quelle adresse IP et la résulta c'enregistrer sur le fichier ping.txt
Voilà un petite test
Ping 192.168.1.1 > c:\ping.txt (ce tach fenction en mode cmd « commande dos »)
Le rapport vient comme ça

********************************************************
Envoi d'une requ?te 'ping' sur 192.168.1.1 avec 32 octets de donn'esÿ:



R?ponse de 192.168.1.1ÿ: octets=32 temps=1 ms TTL=255

R?ponse de 192.168.1.1ÿ: octets=32 temps=1 ms TTL=255

R?ponse de 192.168.1.1ÿ: octets=32 temps=1 ms TTL=255

R?ponse de 192.168.1.1ÿ: octets=32 temps=1 ms TTL=255



Statistiques Ping pour 192.168.1.1:

Paquetsÿ: envoy?s 4, re?us 4, perdus = 0 (perte 0%),

Dur?e approximative des boucles en millisecondes :

Minimum 1ms, Maximum 1ms, Moyenne = 1ms
********************************************************

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.