1

Тема: VBScript: слежение за модификацией файла (лога)

Пример скрипта-монитора, который проверяет каждые 15 минут, не устарел ли указанный файл (проверяется по дате последнего изменения файла). Файл считается устаревшим, если он изменялся более 45 минут назад (от текущего времени). Если файл устарел, выдаётся сообщение. Временные параметры настраиваются в начале скрипта.

' путь к файлу лога:
const FILE_PATH = "X:\work\myfile.log"
' интервал проверки в секундах (15 минут):
const SLEEP_TIME = 900
' интервал в секундах, по истечении которого файл считается устаревшим (45 минут):
const DIFFERENCE_TIME = 2700
' =======================================================
On Error Resume Next
Set FSO = CreateObject("Scripting.FileSystemObject")
While 1
    Set File = FSO.GetFile(FILE_PATH)
    If Err.Number <> 0 Then
        WScript.Echo "Невозможно прочитать файл " & FILE_PATH & vbCrLf & _
            Err.Number & ": " & Err.Description
        Err.Clear
    Else
        If (Now - File.DateLastModified) * 24 * 60 * 60 > DIFFERENCE_TIME Then
            WScript.Echo "Файл """ & FILE_PATH & """ сильно устарел!" & vbCrLf & _
                "Время последней модификации файла: " & File.DateLastModified
        End If
    End If
    WScript.Sleep SLEEP_TIME * 1000
Wend
Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

2

Re: VBScript: слежение за модификацией файла (лога)

Пример решения сходной задачи с помощью WMI. Слежение за любой модификацией указанного файла. Если файл модифицирован, выдаётся сообщение.

strFile = "C:\Temp\test.txt"
strComputer = "." ' имя компьютера ("." означает текущий компьютер)
'==============================================================================
strFileSlash = Replace(strFile, "\", "\\")
strNamespace = "Root\CIMV2"

' Подключаемся к пространству имен
Set objService = GetObject("WinMgmts:\\" & strComputer & "\" & strNamespace)
Set objSink = Wscript.CreateObject("WbemScripting.SWbemSink", "Sink_")

objService.ExecNotificationQueryAsync objSink, _
    "SELECT * FROM __InstanceModificationEvent WITHIN 5 WHERE " &_
    "Targetinstance ISA 'CIM_DataFile' and " &_
    "TargetInstance.Name='" & strFileSlash & "'"

' Выводим сообщение о запуске сканера
Wscript.Echo " Запущен сканер модификации файла " & strFile

' Запускаем бесконечный цикл ожидания
While 1
    WScript.Sleep 1000
Wend

' Процедура-обработчик события OnObjectReady объекта sWbemSink
Sub Sink_OnObjectReady(oOutParams, oContext)
    strResult = Date & " " & Time & vbCrLf & _
        "Изменен файл: " &  oOutParams.TargetInstance.Name & vbCrLf & _
        "Размер: " & oOutParams.PreviousInstance.FileSize & " => " & _
        oOutParams.TargetInstance.FileSize & vbCrLf & _
        "Последний доступ: "& oOutParams.PreviousInstance.LastAccessed & " => " & _
        oOutParams.TargetInstance.LastAccessed
    Wscript.Echo strResult
End Sub
Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.