1 (изменено: Elencheg, 2010-11-16 15:32:57)

Тема: VBS: отслеживание логов бэкапов

Добрый день.
Пытаюсь наклепать скриптик по отстеживанию логов бэпов.
Через поиск нашла уже примерно что-то похожее, но все же это не то...пробовала модернизировать - пока не получается (
логика работы такая: после прохождения очередного бэкапа запускается скрипт который:
1. смотрит лог файл  и Отправляет логи как текст письма
2. Заранее проверяет в логе на наличие ошибок ( ключевое слово : error ). если они имеются - вывести в начало или заголовок письма.
3. Ну и собсственно если лога нет-тоже отправить письмо админ-ру.


Пункты 1 и 3 реализованы, а вот 2 никак не удается......подскажите плз кто что может ) заранее спасибо )

Option Explicit
' Dim variables
Dim oFSO, oWshNetwork, oCDO, oFolder, oFiles, oFile, oTextFile
dim strFileName, strComputerName, LogFile, ForReading

' Create Objects
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oWshNetwork = WScript.CreateObject("WScript.Network")

' Set constants
Const BACKUP_LOG_PATH = "C:\Documents and Settings\<backup user>\Local Settings\Application Data\Microsoft\Windows NT\NTBackup\data"
Const EMAIL_RECIPIENT = "<email>"

' Set variable defaults
strFileName = ""
strComputerName = oWshNetwork.ComputerName

ForReading = 1

' Start script
On Error Resume Next
Set oFolder = oFSO.GetFolder(BACKUP_LOG_PATH)
Set oFiles = oFolder.Files
For Each oFile in oFiles
If oFSO.GetExtensionName(oFile.Name) = "log" Then
If DateValue(oFile.DateLastModified) = Date() Then
LogFile = oFile.Name
strFileName = BACKUP_LOG_PATH & "\" & LogFile
EmailLog(strFileName)
'Exit For
End If
End If
Next

If strFileName = "" Then
EmailError
End If

Sub EmailLog(logFilePath)

Set oCDO = CreateObject("CDO.Message")
Set oTextFile = oFSO.OpenTextFile(logFilePath, ForReading, false, -2)
Dim Text

Text = "NTBackup log on " & strComputerName & " for " & Date() & " :" & vbCrlf & vbCrlf

oCDO.Subject = "Backup Log – " & strComputerName
oCDO.From = strComputerName & "@<domain>"
oCDO.To = EMAIL_RECIPIENT

Do While Not (oTextFile.atEndOfStream)
Text = Text & oTextFile.ReadLine & vbCrlf
Loop

oCDO.TextBody = Text

oCDO.AddAttachment logFilePath

oCDO.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

oCDO.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") ="<smtp server>"

oCDO.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25

oCDO.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1

oCDO.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "<send user>"

oCDO.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "<send password>"

oCDO.Configuration.Fields.Update

oCDO.Send

set oCDO = Nothing

End Sub

Sub EmailError

Set oCDO = CreateObject("CDO.Message")

oCDO.Subject = "Backup Log Missing – " & strComputerName
oCDO.From = strComputerName & "@<domain>"
oCDO.To = EMAIL_RECIPIENT

oCDO.TextBody = "No NTBackup log found on " & strComputerName & " for " & Date() & " !"

oCDO.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

oCDO.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") ="<smtp server>"

oCDO.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25

oCDO.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1

oCDO.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "<send user>"

oCDO.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "<send password>"

oCDO.Configuration.Fields.Update

oCDO.Send

Set oCDO = Nothing

End Sub

set oFSO = Nothing
Set oWshNetwork = Nothing

2 (изменено: DnsIs, 2010-11-17 08:59:22)

Re: VBS: отслеживание логов бэкапов

Elencheg пишет:

...
2. Заранее проверяет в логе на наличие ошибок ( ключевое слово : error ). если они имеются - вывести в начало или заголовок письма.
...

Не хотелось ковырять ваш скрипт, сделал с нуля небольшой примерчик.

Set objFSO = CreateObject("Scripting.FileSystemObject")

Const ForReading = 1
    'ForReading=1 (файл открывается на чтение)
    'ForWriting = 2 (файл открывается на запись)
    'ForAppending=8 (файл открывается на добавление)
Const sFile = "scripten_i.log"
Set objFile = objFSO.OpenTextFile(sFile, ForReading)

Set objRegExp = CreateObject("VBScript.RegExp") 'создается объект регулярных выражений
objRegExp.Pattern = "error" 'что искать
objRegExp.IgnoreCase = True 'независимость от регистра символов

Dim arrFileLines()
i = 0
Do Until objFile.AtEndOfStream
    strLine = objFile.ReadLine 'Читаем 1 строку файла
    If objRegExp.Test(strLine) Then 'проверяем наличие слова error в строке
        WScript.Echo objRegExp.Test(strLine) & VbCrLf & strLine 'выводим строку, вы наверное удалите эту строку :)
        Redim Preserve arrFileLines(i) 'Пишем в массив
        arrFileLines(i) = objFile.ReadLine ' Пишем в массив
        i = i + 1
    End If
Loop
objFile.Close 'Закрываем файл

'В итоге имеем массив arrFileLines(i) с ошибками, далее что хотим, то творим

Измените переменную sFile под себя и все.

Нас невозможно сбить с пути, нам пофигу куда идти.

3 (изменено: Elencheg, 2010-11-17 09:48:38)

Re: VBS: отслеживание логов бэкапов

DnsIs, огромное спасибо!