23 апреля 2015 г.

Полезные VB скрипты для BGInfo


Всем привет!
Ранее я писал о том, как установить и настроить утилиту BGInfo. Очень удобно, когда все, что необходимо, находится перед глазами. Но что делать, если Вы не дома, а полезная информация на Вашем мониторе?! Например, публичный IP-адрес, свободное место на диске, да мало ли что еще может пригодиться. Подобная необходимость возникает чаще, если у Вас в домашней сети имеется веб-сервер, или какой либо другое приложение к которому нужно обеспечить доступ извне. Вам повезет, если Ваш маршрутизатор (роутер) поддерживает ежедневные отчеты, но если нет, то дальше будет показано как настроить отчеты по событию на GMail или другую почту.
Для начала вспомним VB функцию определения публичного IP:

FUNCTION getPublicIP()
    DIM strURL, strResponse
    strURL = "http://myip.dnsomatic.com"
    
    DIM oXMLHTTP: SET oXMLHTTP = CreateObject("MSXML2.XMLHTTP")
    call oXMLHTTP.open("GET", strURL, false)
    on error resume next
     call oXMLHTTP.send()
    on error goto 0
    strResponse = oXMLHTTP.ResponseText
    SET oXMLHTTP = nothing
    
    DIM oRegExp: SET oRegExp = new RegExp
    oRegExp.Pattern =  "((0|1[0-9]{0,2}|2[0-9]{0,1}|2[0-4][0-9]|25[0-5]|[3-9][0-9]{0,1})\.){3}(0|1[0-9]{0,2}|2[0-9]{0,1}|2[0-4][0-9]|25[0-5]|[3-9][0-9]{0,1})"
    oRegExp.Global = True
    IF oRegExp.test(strResponse) THEN strResponse = oRegExp.execute(strResponse)(0)
    SET oRegExp = nothing
    
    getPublicIP = strResponse
END FUNCTION

Эта функция выполняет запрос по адресу http://myip.dnsomatic.com и с помощью регулярного выражения извлекает IP-адрес из ответа сервера. Вы можете сами пройти по вышеуказанному адресу и убедиться, что ответ не содержит ничего другого.

Теперь посмотрим на наш готовый скрипт отправляющий электронное письмо на GMail:
' Send E-Mail to GMail
FUNCTION getPublicIP()
    DIM strURL, strResponse
    strURL = "http://myip.dnsomatic.com"
    
    DIM oXMLHTTP: SET oXMLHTTP = CreateObject("MSXML2.XMLHTTP")
    call oXMLHTTP.open("GET", strURL, false)
    on error resume next
     call oXMLHTTP.send()
    on error goto 0
    strResponse = oXMLHTTP.ResponseText
    SET oXMLHTTP = nothing
    
    DIM oRegExp: SET oRegExp = new RegExp
    oRegExp.Pattern =  "((0|1[0-9]{0,2}|2[0-9]{0,1}|2[0-4][0-9]|25[0-5]|[3-9][0-9]{0,1})\.){3}(0|1[0-9]{0,2}|2[0-9]{0,1}|2[0-4][0-9]|25[0-5]|[3-9][0-9]{0,1})"
    oRegExp.Global = True
    IF oRegExp.test(strResponse) THEN strResponse = oRegExp.execute(strResponse)(0)
    SET oRegExp = nothing
    
    getPublicIP = strResponse
END FUNCTION

Sub SendIPInfo()

  On Error Resume Next

  Dim iMsg, iConf, Flds, ServerName, ip, br

  Set iMsg = CreateObject("CDO.Message")
  Set iConf = CreateObject("CDO.Configuration")
  Set Flds = iConf.Fields
  Set br = "< br/ >"
  
  ip = getPublicIP()

  schema = "http://schemas.microsoft.com/cdo/configuration/"

  Flds.Item(schema & "sendusing") = 2
  Flds.Item(schema & "smtpserver") = "smtp.gmail.com" 
  Flds.Item(schema & "smtpserverport") = 465
  Flds.Item(schema & "smtpauthenticate") = 1
  Flds.Item(schema & "sendusername") = "email@gmail.com"
  Flds.Item(schema & "sendpassword") = "password"
  Flds.Item(schema & "smtpusessl") = 1
  Flds.Update

  ' message body
  strDate = CStr(Date()) & " " & CStr(Time())
  strBody = br & "IP info for HomeServer at " & strDate & br & br
  
  strBody = strBody & "IP: " & ip

  With iMsg
    .To = "Receiver Name <receiver.email@gmail.com>"
    .From = "Sender Name <sender.email@gmail.com>"
    .Subject = "Subject title " & strDate
    .HTMLBody = strBody 
    .Sender = "Sender name"
    .Organization = "Example Inc."
    .ReplyTo = "replyTo.email@gmail.com"
 
    Set .Configuration = iConf

    .Send 
  End With
  
  Set iMsg = nothing
  Set iConf = nothing
  Set Flds = nothing
End Sub  

SendIPInfo 

Как видно из примера, тело сообщения формируется в переменной strBody, а функция getPublicIP() передает IP-адрес в переменную ip. Вы можете добавлять необходимые значения строку за строкой в переменную strBody, формируя тем самым тот отчет, который Вам необходим. Не забывайте про конкатенацию (объединение) строк с помощью амперсантов (&) и перевода строки переменной br. Обратите внимание, что в декларации переменной br между скобками имеются лишние пробелы, в Вашем скрипте их быть не должно и в листинге написано так из-за того, что SyntaxHighlighter вместо тега отображает перевод строки.
Настройки необходимые для соединения с smtp-сервером находятся с 39 по 45 строку. С 54 по 60 строку настраиваются заголовки и содержимое письма.
Осталось только добавить скрипт в планировщик заданий (подробней как добавить в планировщик описывалось здесь) и получать на электронный адрес отчеты. Надеюсь скрипт окажется полезным и сэкономит страждущим время и нервы :)

Комментариев нет:

Отправить комментарий