Machine allumée

Résolu
dale02 Messages postés 24 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 25 mars 2005 - 11 déc. 2004 à 17:48
ahmedkor Messages postés 13 Date d'inscription vendredi 24 janvier 2003 Statut Membre Dernière intervention 12 janvier 2010 - 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

19 réponses

dale02 Messages postés 24 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 25 mars 2005
14 déc. 2004 à 14:06
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
3
barley Messages postés 107 Date d'inscription jeudi 28 janvier 2010 Statut Membre Dernière intervention 28 janvier 2010
11 déc. 2004 à 18:23
"j'arrive pas à pouvoir traité le résultat du ping."
c'est à dire?
0
dale02 Messages postés 24 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 25 mars 2005
11 déc. 2004 à 18:25
j'aimerai savoir si le ping s'est bien exécuté (c'est a dire que les octes se sont envoyé)
0
barley Messages postés 107 Date d'inscription jeudi 28 janvier 2010 Statut Membre Dernière intervention 28 janvier 2010
11 déc. 2004 à 18:27
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dale02 Messages postés 24 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 25 mars 2005
11 déc. 2004 à 18:29
jsutement j'ai essayé des tas de scripts comme celui la!! masi ca marche apprement pas!! Tu sais pas m'aider?
0
barley Messages postés 107 Date d'inscription jeudi 28 janvier 2010 Statut Membre Dernière intervention 28 janvier 2010
11 déc. 2004 à 18:31
oki, je vais voir ca...
je vois pas ce qui pourrait ne pas marcher la dedans...
je re
0
barley Messages postés 107 Date d'inscription jeudi 28 janvier 2010 Statut Membre Dernière intervention 28 janvier 2010
11 déc. 2004 à 19:08
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
0
barley Messages postés 107 Date d'inscription jeudi 28 janvier 2010 Statut Membre Dernière intervention 28 janvier 2010
11 déc. 2004 à 19:28
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
0
barley Messages postés 107 Date d'inscription jeudi 28 janvier 2010 Statut Membre Dernière intervention 28 janvier 2010
11 déc. 2004 à 19:34
c'est bon, sur XP, ca marche
j'espere que c'est bon pour toi aussi...
0
dale02 Messages postés 24 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 25 mars 2005
12 déc. 2004 à 22:03
ca me fait erreur de compilation dés le début
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
13 déc. 2004 à 09:17
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.
0
dale02 Messages postés 24 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 25 mars 2005
13 déc. 2004 à 13:07
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
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
13 déc. 2004 à 14:48
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.
0
dale02 Messages postés 24 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 25 mars 2005
13 déc. 2004 à 16:25
je teste cela en rentrant chez moi, merci bcp!!!

Je posterai le tout quand ce sera exécutable
0
dale02 Messages postés 24 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 25 mars 2005
13 déc. 2004 à 20:41
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
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
14 déc. 2004 à 08:35
Une erreur sur le mot-clé "If" !!!!!!
La, t'as un problème !!

Christophe R.
0
dale02 Messages postés 24 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 25 mars 2005
14 déc. 2004 à 11:24
ca je sais, mais peut on m'aider?
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
14 déc. 2004 à 11:50
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.
0
ahmedkor Messages postés 13 Date d'inscription vendredi 24 janvier 2003 Statut Membre Dernière intervention 12 janvier 2010
6 mars 2006 à 16:10
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
********************************************************
0
Rejoignez-nous