2010-06-16 9 views
0

Je sais que j'ai déjà posé la question sur le script ping mais maintenant j'ai une nouvelle question à ce sujet :-) J'espère que quelqu'un peut m'aider à nouveau.Ping script avec email dans vbs

strText = "here comes the mail message" 

strFile = "test.log" 

PingForever strHost, strFile 

Sub PingForever(strHost, outputfile) 
    Dim Output, Shell, strCommand, ReturnCode 

    Set Output = CreateObject("Scripting.FileSystemObject").OpenTextFile(outputfile, 8, True) 
    Set Shell = CreateObject("wscript.shell") 
    strCommand = "ping -n 1 -w 300 " & strHost 
    While(True) 
     ReturnCode = Shell.Run(strCommand, 0, True)  
     If ReturnCode = 0 Then 
      Output.WriteLine Date() & " - " & Time & " | " & strHost & " - ONLINE" 
     Else 
      Output.WriteLine Date() & " - " & Time & " | " & strHost & " - OFFLINE" 

      Set objEmail = CreateObject("CDO.Message") 
      objEmail.From = "[email protected]" 
      objEmail.To = "[email protected]" 
      objEmail.Subject = "Computer" & strHost & " is offline" 
      objEmail.Textbody = strText 
      objEmail.Configuration.Fields.Item _ 
       ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 
      objEmail.Configuration.Fields.Item _ 
       ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _ 
        "smtpadress" 
      objEmail.Configuration.Fields.Item _ 
       ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 
      objEmail.Configuration.Fields.Update 
      objEmail.Send 

     End If 
     Wscript.Sleep 2000 
    Wend 
End Sub 

Mon problème est maintenant, le courrier arrive toutes les 2 secondes, lorsque l'ordinateur est hors ligne. Quelqu'un peut-il me montrer comment le faire avec des drapeaux? Donc, un seul courrier arrive quand il est hors ligne?

Merci pour votre aide.

Répondre

1

Utilisez un drapeau et un rapport que lorsque l'état change

FLAG0 = "ON" 
While(True) 
    ReturnCode = Shell.Run(strCommand, 0, True)  
    If ReturnCode = 0 Then 
     Output.WriteLine Date() & " - " & Time & " | " & strHost & " - ONLINE" 
     FLAG0 = "ON" 
    Else 
     Output.WriteLine Date() & " - " & Time & " | " & strHost & " - OFFLINE" 
     IF FLAG0 = "ON" THEN 
      FLAG0 = "OFF" 
      Set objEmail = CreateObject("CDO.Message") 
      ...... rest of mailing code 
     END IF 

    End If 
+0

merci, je l'essaye, mais il arrive une erreur de syntaxe ... vous pouvez vérifier votre code, pls? Je suis sry je n'ai jamais travaillé avec des drapeaux avant – Sebastian

+0

J'ai essayé de corriger la syntaxe. Vérifiez maintenant –

+0

maintenant le message d'erreur: Object Required [string: "ON"]. Avez-vous une idée? – Sebastian