<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBScript: слежение за модификацией файла (лога)]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=428&amp;type=atom" />
	<updated>2007-06-23T13:39:18Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=428</id>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: слежение за модификацией файла (лога)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=3276#p3276" />
			<content type="html"><![CDATA[<p>Пример решения сходной задачи с помощью WMI. Слежение за любой модификацией указанного файла. Если файл модифицирован, выдаётся сообщение.<br /></p><div class="codebox"><pre><code>strFile = &quot;C:\Temp\test.txt&quot;
strComputer = &quot;.&quot; &#039; имя компьютера (&quot;.&quot; означает текущий компьютер)
&#039;==============================================================================
strFileSlash = Replace(strFile, &quot;\&quot;, &quot;\\&quot;)
strNamespace = &quot;Root\CIMV2&quot;

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

objService.ExecNotificationQueryAsync objSink, _
    &quot;SELECT * FROM __InstanceModificationEvent WITHIN 5 WHERE &quot; &amp;_
    &quot;Targetinstance ISA &#039;CIM_DataFile&#039; and &quot; &amp;_
    &quot;TargetInstance.Name=&#039;&quot; &amp; strFileSlash &amp; &quot;&#039;&quot;

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

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

&#039; Процедура-обработчик события OnObjectReady объекта sWbemSink
Sub Sink_OnObjectReady(oOutParams, oContext)
    strResult = Date &amp; &quot; &quot; &amp; Time &amp; vbCrLf &amp; _
        &quot;Изменен файл: &quot; &amp;  oOutParams.TargetInstance.Name &amp; vbCrLf &amp; _
        &quot;Размер: &quot; &amp; oOutParams.PreviousInstance.FileSize &amp; &quot; =&gt; &quot; &amp; _
        oOutParams.TargetInstance.FileSize &amp; vbCrLf &amp; _
        &quot;Последний доступ: &quot;&amp; oOutParams.PreviousInstance.LastAccessed &amp; &quot; =&gt; &quot; &amp; _
        oOutParams.TargetInstance.LastAccessed
    Wscript.Echo strResult
End Sub</code></pre></div>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2007-06-23T13:39:18Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=3276#p3276</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBScript: слежение за модификацией файла (лога)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=2622#p2622" />
			<content type="html"><![CDATA[<p>Пример скрипта-монитора, который проверяет каждые 15 минут, не устарел ли указанный файл (проверяется по дате последнего изменения файла). Файл считается устаревшим, если он изменялся более 45 минут назад (от текущего времени). Если файл устарел, выдаётся сообщение. Временн<strong>ы</strong>е параметры настраиваются в начале скрипта.<br /></p><div class="codebox"><pre><code>&#039; путь к файлу лога:
const FILE_PATH = &quot;X:\work\myfile.log&quot;
&#039; интервал проверки в секундах (15 минут):
const SLEEP_TIME = 900
&#039; интервал в секундах, по истечении которого файл считается устаревшим (45 минут):
const DIFFERENCE_TIME = 2700
&#039; =======================================================
On Error Resume Next
Set FSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
While 1
    Set File = FSO.GetFile(FILE_PATH)
    If Err.Number &lt;&gt; 0 Then
        WScript.Echo &quot;Невозможно прочитать файл &quot; &amp; FILE_PATH &amp; vbCrLf &amp; _
            Err.Number &amp; &quot;: &quot; &amp; Err.Description
        Err.Clear
    Else
        If (Now - File.DateLastModified) * 24 * 60 * 60 &gt; DIFFERENCE_TIME Then
            WScript.Echo &quot;Файл &quot;&quot;&quot; &amp; FILE_PATH &amp; &quot;&quot;&quot; сильно устарел!&quot; &amp; vbCrLf &amp; _
                &quot;Время последней модификации файла: &quot; &amp; File.DateLastModified
        End If
    End If
    WScript.Sleep SLEEP_TIME * 1000
Wend</code></pre></div>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2007-04-25T10:11:57Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=2622#p2622</id>
		</entry>
</feed>
