Voir si un pc est allumé

Voir si un pc est allumé - VB/VBA/VBS - Programmation

Marsh Posté le 30-11-2004 à 08:59:36    

Bonjour à tous,
 
Depuis un petit temps je cherche ma façon de voir, via un script vbs, si un pc est allumé!!(un genre de ping en fait)
 
Mais j'aimerai qu'il me sorte une donnée exploitable (par ex 1 si allumé et 0 si pas allumé)
 
Merci de votre aide,
 
Damien

Reply

Marsh Posté le 30-11-2004 à 08:59:36   

Reply

Marsh Posté le 30-11-2004 à 20:08:23    

J'ai une boucle qui me permet de voir tous les pc's du réseau!
 
Ce que je voudrais, c'est incorporé dans la boucle un test pour voir si le pc est allumé

Reply

Marsh Posté le 30-11-2004 à 22:26:08    

Demande a didier :lol:

Reply

Marsh Posté le 01-12-2004 à 07:02:23    

Je le poste dés que je suis au cours... En fait mon script contact l'annuaire du serveur du domaine! De là j'ai la liste de tous les pcs concernés par mon domaine.
 
Ensuite, je voudrais que a chaque foi que je lis une ordinateur dans la boucle, que je puisse vérifier si il est allumé ou pas

Reply

Marsh Posté le 01-12-2004 à 10:41:23    

Code :
  1. Dim args, oWinNT, oDomain
  2. Set Shell = WScript.CreateObject("WScript.Shell" )
  3. domain="domjemelle"
  4. Wscript.echo "Liste des machines du domaine " & domain
  5. set oWinNT=GetObject("WinNT://" & domain)
  6. for each oDomain in oWinNT
  7. if  lcase(oDomain.class)="computer" then Wscript.echo oDomain.name
  8. next


 
Je voudrais ajouter le test dans le IF et savoir via un signe spécifique (1 ou 0 par ex) si le pc est allumé

Reply

Marsh Posté le 01-12-2004 à 15:58:44    

je pense qu'il a surement d'autre façon que le ping, par exemple faire une tentative de connection et si cela marche pas, renvoyer une valeur

Reply

Marsh Posté le 01-12-2004 à 16:06:09    

c ton labo dev ca ? :whistle:

Reply

Marsh Posté le 01-12-2004 à 16:15:14    

loin de là mais cela en fera partie, j'ai vu plein de script mais iren du tout

Reply

Marsh Posté le 01-12-2004 à 16:55:57    

chepa_jemls a écrit :

je pense qu'il a surement d'autre façon que le ping, par exemple faire une tentative de connection et si cela marche pas, renvoyer une valeur


Pourquoi tu ne veux pas de ping ? Comme tu ne traverses pas de routeur ou de firewall, c'est techniquement la solution la plus simple et la plus fiable, même avec les firewall type SP2. Je vais pas te faire un cours sur la pile TCP/IP, et le protocole ICMP, mais bon...

Reply

Marsh Posté le 01-12-2004 à 21:49:12    

J'ai pas dis que je voulais pas le ping, je veux simplement donner un max d'info possible relatif à mon problème...
 
Je veux pas donner trop de contrainte.
 
Est ce possible ou pas?

Reply

Marsh Posté le 01-12-2004 à 21:49:12   

Reply

Marsh Posté le 02-12-2004 à 09:57:52    

chepa_jemls a écrit :

J'ai pas dis que je voulais pas le ping, je veux simplement donner un max d'info possible relatif à mon problème...
 
Je veux pas donner trop de contrainte.
 
Est ce possible ou pas?


Oui c'est possible, en essayant de contacter le PC en face. Et la meilleur façon de contacter le PC en face, c'est d'envoyer un paquet Ping, car le protocole utilisé est indépendant des ports ouverts, etc.  
 
Donc soit tu trouves un objet qui fait ping en VB, soit tu utilises WScript.Shell pour exécuter ping.exe.

Reply

Marsh Posté le 02-12-2004 à 11:05:00    

C'est justement là ou se trouyve mon problème...
 
J'avais trouvé un truc en VB et ca me fesait un erreur...  
 
J'ai aussi testé le ping via WScript.Shell, cela va très bien mais j'arrive pas a avoir le retour d'une valeur qui me permettrais de faire un test suivant si le pc est allumé ou éteind!
 
Je suis clair?

Reply

Marsh Posté le 02-12-2004 à 11:12:55    

chepa_jemls a écrit :


J'ai aussi testé le ping via WScript.Shell, cela va très bien mais j'arrive pas a avoir le retour d'une valeur qui me permettrais de faire un test suivant si le pc est allumé ou éteind!
 
Je suis clair?


All Clear.
 
Va voir comment le monsieur fait ici:
   http://www.pcwelt.de/downloads/office/vb-script/8767/
 
En fait, tu fais un "ping -n 1 127.0.0.1 > c:\temp\fichier.txt", puis tu lis le contenu du fichier pour voir s'il contient un round-trip time. Si c'est le cas: le PC est vivant.

Reply

Marsh Posté le 02-12-2004 à 11:52:57    

comment je fais pour voir le contenu du code de cette personne...  Moi pas comprendre l'allemand

Reply

Marsh Posté le 02-12-2004 à 12:01:53    

Lam's a écrit :


En fait, tu fais un "ping -n 1 127.0.0.1 > c:\temp\fichier.txt", puis tu lis le contenu du fichier


Comment tu sais qu'il a fini d'écrire dans le fichier ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 02-12-2004 à 12:08:25    

HelloWorld a écrit :

Comment tu sais qu'il a fini d'écrire dans le fichier ?


T'attends que le programme finisse. C'est le 3ème argument à WShell.Run
 
 
Le code (en allemand :lol:)
 

Code :
  1. Dim inhalt(50)
  2. Set MyShell = CreateObject("WScript.Shell" )
  3. Set MyFiles = CreateObject("Scripting.FileSystemObject" )
  4. If not MyFiles.FileExists("C:\Logfile.txt" ) Then MyFiles.CreateTextFile("C:\Logfile.txt" )
  5. Abfrage = MsgBox ("Wollen Sie IP-Adressen hinzufügen?", vbYesNo)
  6.    If Abfrage =  vbYes Then
  7.  Do
  8.           Eingabe = InputBox("Geben Sie die neue(n) IP Adressen ein. Um den Ping Befehl auszuführen, klicken Sie auf abbrechen." )
  9.          IPS=IPS & Eingabe & chr(13) & chr(10)
  10.          loop Until Eingabe = ""
  11.      Set logfile = MyFiles.OpenTextFile("C:\Logfile.txt",8)
  12.      logfile.write(IPS)
  13.      logfile.close
  14.    End If
  15. Set InfoZeile = MyFiles.OpenTextFile("C:\Logfile.txt",1)
  16. Do
  17. n=n+1
  18.        Inhalt(n) = InfoZeile.ReadLine
  19. if Inhalt(n)="" then n=n-1
  20. Loop Until InfoZeile.AtEndOfStream = True     
  21. For x = 1 to n
  22. Proggi = "%comspec% /c ping.exe -n 1 -a" & " " & Inhalt(x) & " " & ">c:\temp.txt"
  23. Return = MyShell.Run(Proggi,0,True)
  24. Set TempFile =MyFiles.OpenTextFile("C:\temp.txt" )     
  25.        Abfrage = Tempfile.Readall
  26.         If instr(Abfrage, "ytes=" ) > 0 Then
  27.   Ausgabe = MsgBox("Ping an " + Inhalt(x) + " erfolgreich!", 1)
  28.  Else
  29.  Ausgabe = MsgBox("Host " + Inhalt(x) + " nicht erreichbar", 1)
  30. End if
  31. tempfile.close
  32.        If Ausgabe = 2 Then WScript.Quit
  33. Next

Reply

Marsh Posté le 02-12-2004 à 13:25:01    

Ah ok.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 02-12-2004 à 13:49:56    

je comprends pas ca façon de faire son ping  
 
Proggi = "%comspec% /c ping.exe -n 1 -a" & " " & Inhalt(x) & " " & ">c:\temp.txt"

Reply

Marsh Posté le 02-12-2004 à 14:02:59    

%comspec%, c'est cmd (ça date de MS-DOS, où on pouvait utiliser d'autres interpreteurs de commandes, comme 4Dos uo autres).  
 
Faire "cmd /c toto.exe", ça permet d'être sûr de pouvoir exécuter toto.exe en le cherchant dans le path, etc. C'est très utile si tu souhaites exécuter "copy" par exemple.
 
 
 
Dans le cas présent, c'est pas très utile. Pour le reste, tu dois comprendre tout seul, ou en faisant "ping /?". ;)


Message édité par Lam's le 02-12-2004 à 14:03:13
Reply

Marsh Posté le 02-12-2004 à 15:10:35    

Sous Win9x c'est command.com, d'où %comspec% je présume.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 02-12-2004 à 17:37:44    

Lam's a écrit :

%comspec%, c'est cmd (ça date de MS-DOS, où on pouvait utiliser d'autres interpreteurs de commandes, comme 4Dos uo autres).  
 
Faire "cmd /c toto.exe", ça permet d'être sûr de pouvoir exécuter toto.exe en le cherchant dans le path, etc. C'est très utile si tu souhaites exécuter "copy" par exemple.
 
 
 
Dans le cas présent, c'est pas très utile. Pour le reste, tu dois comprendre tout seul, ou en faisant "ping /?". ;)


 
Bon ben j'essairai cela, mais j'ai des doutes sur la possibilté de vérifié si le ping s'est bien exécuté

Reply

Marsh Posté le 02-12-2004 à 19:34:11    

tiens je te le fais en wmi
 

Citation :


machine="nom_machine_a_tester"
 
set ObjPing=GetObject("winmgmts:{impersonationLevel=impersonate}" ).ExecQuery("select"_
&" * from win32_PingStatus where address='"&machine&"'" )
 
for each obj in ObjPing
if obj.StatusCode <> 0 or  IsNull(obj.StatusCode) then
 
msgbox "la machine" & machine & "n'est pas connecté au réseau"
 
end if  
next
 
set ObjPing = nothing  


 

Reply

Marsh Posté le 02-12-2004 à 22:29:19    

j'en ai entendu parlé du wmi, masi vu que je début, je dois sauvez cela sous quel format?

Reply

Marsh Posté le 05-12-2004 à 13:19:59    

je le met en .vbs?

Reply

Marsh Posté le 07-12-2004 à 09:52:15    

voilà, je viens de tester le script sur le réseau!voilà l'erreur que cela me donne:
 
H:\>cscript "C:\Documents and Settings\info210\Bureau\Copie de listpc.vbs"
C:\Documents and Settings\info210\Bureau\Copie de listpc.vbs(6, 1) (null): 0x800
41010

 
 
Pour info, j'ai copié le script au format .vbs...
 
Quelqu'un sait m'aider?

Reply

Marsh Posté le 09-12-2004 à 11:03:08    

on peut m'aider?

Reply

Marsh Posté le 12-12-2004 à 21:51:41    

Je sais pk le script ne marche pas, c'est parce que c'est un script pour un domain win2003..
 
Le severu est un serveur sous windows 2000!! Puet on m'aider svp?

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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