kotlyar, пробуйте:
читать дальше »
Код:
Option Explicit
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adFilterNone = 0
Dim strSourceFolder
Dim objFSO
Dim objFile
Dim objConnection
Dim objRecordSet
Dim objSWbemDateTime
Dim strComputer
Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemSink
strSourceFolder = "C:\Песочница\052\sib.biz.imap"
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists(strSourceFolder) Then
Set objConnection = WScript.CreateObject("ADODB.Connection")
Set objRecordSet = WScript.CreateObject("ADODB.Recordset")
Set objSWbemDateTime = WScript.CreateObject("WbemScripting.SWbemDateTime")
objConnection.Open _
"Provider=SQLOLEDB;Server=SQL;Database=SampleDatabase;User Id=sa;Password=password;"
objRecordSet.Open "SELECT * FROM Messages", objConnection, adOpenStatic, adLockOptimistic
For Each objFile In objFSO.GetFolder(strSourceFolder).Files
Select Case LCase(objFSO.GetExtensionName(objFile.Name))
Case "msg"
objRecordSet.Filter = "CreationDate = '" & objFile.DateCreated & "' AND FileName = '" & objFile.Path & "'"
If objRecordSet.RecordCount = 0 Then
objRecordSet.AddNew Array("CreationDate", "FileName"), Array(objFile.DateCreated, objFile.Path)
End If
objRecordSet.Filter = adFilterNone
End Select
Next
objRecordSet.Close
objConnection.Close
strComputer = "."
Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set objSWbemSink = WScript.CreateObject("WbemScripting.SWbemSink", "Sink_")
With objSWbemServicesEx.Get("Win32_Directory.Name='" & Replace(strSourceFolder & "\.", "\", "\\") & "'")
objSWbemServicesEx.ExecNotificationQueryAsync objSWbemSink, _
"SELECT * FROM __InstanceOperationEvent WITHIN 1 WHERE " & _
"TargetInstance ISA 'CIM_DataFile' AND " & _
"TargetInstance.Drive = '" & .Drive & "' AND " & _
"TargetInstance.Path = '" & .Path & "' AND " & _
"TargetInstance.Extension = 'msg'"
Do
WScript.Sleep 100
Loop
objSWbemSink.Cancel
Set objSWbemSink = Nothing
Set objSWbemServicesEx = Nothing
Set objSWbemLocator = Nothing
End With
Set objSWbemDateTime = Nothing
Set objRecordSet = Nothing
Set objConnection = Nothing
Else
WScript.Echo "Source folder [" & strSourceFolder & "] not found."
WScript.Quit 1
End If
Set objFSO = Nothing
WScript.Quit 0
'=============================================================================
'=============================================================================
Sub Sink_OnObjectReady(objSWbemObjectEx, objSWbemAsyncContext)
objConnection.Open _
"Provider=SQLOLEDB;Server=SQL;Database=SampleDatabase;User Id=sa;Password=password;"
objRecordSet.Open "SELECT * FROM Messages", _
objConnection, adOpenStatic, adLockOptimistic
With objSWbemObjectEx
Select Case .Path_.Class
Case "__InstanceCreationEvent"
WScript.Echo Now() & " | | Create: [" & .TargetInstance.Name & "]"
objSWbemDateTime.Value = .TargetInstance.CreationDate
objRecordSet.AddNew Array("CreationDate", "FileName"), Array(objSWbemDateTime.GetVarDate, .TargetInstance.Name)
Case "__InstanceDeletionEvent"
WScript.Echo Now() & " | | Delete: [" & .TargetInstance.Name & "]"
objSWbemDateTime.Value = .TargetInstance.CreationDate
objRecordSet.Filter = "CreationDate = '" & objSWbemDateTime.GetVarDate & "' AND FileName = '" & .TargetInstance.Name & "'"
If objRecordSet.RecordCount = 1 Then
objSWbemDateTime.SetFileTime .TIME_CREATED, False
objRecordSet.Update Array("DeletionDate"), Array(objSWbemDateTime.GetVarDate)
End If
objRecordSet.Filter = adFilterNone
End Select
End With
objRecordSet.Close
objConnection.Close
End Sub
'=============================================================================
Примерный вид таблицы «Messages» в базе данных «SampleDatabase»:
Размер для поля FileName подберите по Вашим данным. Я использовал SQL Server 2000, для других версий/серверов Connection String может отличаться.
|