Option Explicit
Const cdoSendUsingPort = 2
Const cdoBasic = 1
Const strSchema = "http://schemas.microsoft.com/cdo/configuration/"
Dim objSWbemServicesEx
Dim objSWbemObjectEx
Dim strIPAddresses
Dim elem
Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Do
If IsConnected() Then
strIPAddresses = ""
For Each objSWbemObjectEx In objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
For Each elem In objSWbemObjectEx.IPAddress
strIPAddresses = strIPAddresses & elem & vbCrLf
Next
Next
With WScript.CreateObject("CDO.Message")
.From = "account@mail.ru"
.To = "account@yandex.ru"
.Subject = "IPAdresses"
.Textbody = strIPAddresses
With .Configuration.Fields
.Item(strSchema & "smtpserver") = "smtp.mail.ru"
.Item(strSchema & "sendusing") = cdoSendUsingPort
.Item(strSchema & "smtpserverport") = 25
.Item(strSchema & "smtpauthenticate") = cdoBasic
.Item(strSchema & "sendusername") = "account@mail.ru"
.Item(strSchema & "sendpassword") = "password"
.Update
End With
.Send
End With
Exit Do
End If
WScript.Sleep 10 * 60 * 1000
Loop
Set objSWbemObjectEx = Nothing
Set objSWbemServicesEx = Nothing
WScript.Quit 0
Function IsConnected()
Dim objSWbemObjectEx
IsConnected = False
For Each objSWbemObjectEx In objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_PingStatus WHERE Address = 'www.google.com'")
With objSWbemObjectEx
If Not IsNull(.StatusCode) And .StatusCode = 0 Then
IsConnected = True
End If
End With
Exit For
Next
Set objSWbemObjectEx = Nothing
End Function
Вопросы по работе скрипта:
WScript.Sleep 10 * 60 * 1000
1. Почему эта часть кода находится в промежутке Do......Loop, отвечающего за отсылку письма, а не за проверку пинга до ресурса?
2. Выходит что будет повторяться отсылка сообщения каждые 10 минут, а не проверка пинга (хотя на ящик приходит только одно письмо)?
3. Тогда с какой периодичностью будет пинговаться ресурс?(если слишком часто - не повлияет ли это на производительность системы в целом)
4. В чем смысл Do......Loop, отвечающего за отсылку скрипта, если письмо должно и приходит только один раз?
5. Почему нет промежутка Do......Loop, отвечающего за пинг ресурса?
6. То, что я вижу в самом скрипте (Если есть пинг - отослать письмо, подождать, повторить, если пинга нет - проверить пинг, выйти)- никак не вяжется с моим пониманием его работы (проверить пинг, если нету - подождать, повторить снова, если есть - выполнить отправку письма)... То-есть почему сначала идет часть кода с отсылкой письма и именно она в скрипте ставится на повторение, а чать кода с проверкой пинга на повтор не ставится?
Сразу оговорюсь - скрипт пашет на УРА, задал вопросы что бы разобраться что к чему, буду очень признателен за ответы на них)