Скрипт пинга с электронной почтой в vbs

Я знаю, что уже задавал вопрос о скрипте ping, но теперь у меня есть новый вопрос по этому поводу :-) Я надеюсь, что кто-то снова сможет мне помочь.

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

Моя проблема теперь, почта приходит все 2 секунды, когда компьютер не в сети. Может кто-нибудь показать мне, как сделать это с флагами? То есть только одна почта приходит, когда она не в сети?

Спасибо за вашу помощь.


person Sebastian    schedule 16.06.2010    source источник


Ответы (1)


Использовать флаг и сообщать только при изменении состояния

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
person Dr. belisarius    schedule 16.06.2010
comment
спасибо, я попробовал, но возникает синтаксическая ошибка... можете ли вы проверить свой код, пожалуйста? извините, я никогда раньше не работал с флагами - person Sebastian; 16.06.2010
comment
Пытался исправить синтаксические ошибки. Проверь это сейчас - person Dr. belisarius; 16.06.2010
comment
теперь появляется сообщение об ошибке: Требуется объект [строка: ON]. У вас есть идея? - person Sebastian; 17.06.2010