strDir = "\\Shares\\Admins docs\\"
strComputer = "fs"
Dim Body
Function SendPost(strSMTP_Server, strTo, strFrom, strSubject, strBody)
Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
Set Flds = iConf.Fields
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSMTP_Server
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 10
Flds.Update
iMsg.Configuration = iConf
iMsg.To = strTo
iMsg.From = strFrom
iMsg.Subject = strSubject
iMsg.TextBody = strBody
iMsg.Send
End Function
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMv2")
Set objEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceOperationEvent WITHIN 5 WHERE " & _
"TargetInstance ISA 'CIM_DataFile'" & _
" AND TargetInstance.Drive = 'e:'" & _
" AND TargetInstance.Path ='" & strDir & "'")
Do While(True)
Set objReceivedEvent = objEvents.NextEvent
Body = "File modifed: " & objReceivedEvent.TargetInstance.FileName & " " & objReceivedEvent.TargetInstance.Name
Call SendPost("mail2", "kloodj@xxx.ru", "apatkin@xxx.ru", "File modifed", body)
' WScript.Echo "File modifed: " & objReceivedEvent.TargetInstance.FileName
' WScript.Echo "Name: " & objReceivedEvent.TargetInstance.Name
Loop
VBScript: Мониторинг дерриктории?
По VBScript'у тут можно спросить?
да, можно.
Пишу скрипт который в идеале будет сканить деррикторию на предмет создания в нем новых документов и изменения имеющихся, оповещая об этом почтовой рассылкой.
Код:
Все хорошо, но возникают проблеммы с кодировкой имен файлов записаных на кирилице.
И хочется отслеживать какое именно событие происходит? Например создан, модифицирован, удален?
А также можно ли реализовать чтобы скрипт так же отслеживал сабдерриктории?
готового решения не будет (я имею в виду код), а подсказать что смогу - подскажу )
проход по поддиректориям выполняется рекурсией, содание файлов проверяется наличием в массиве нового элемента. т.е. создаешь на новом шаге новый массив, и сравниваешь с предыдущим, если есть изменения, отправляешь это юзеру. не забывай только старый массив удалять :)
а на VBS я лично не писал )
Код:
Set objEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceOperationEvent WITHIN 5 WHERE " & _
"TargetInstance ISA 'CIM_DataFile'" & _
" AND TargetInstance.Drive = 'e:'" & _
" AND TargetInstance.Path = '\\shares\\Admins docs\\'")
("SELECT * FROM __InstanceOperationEvent WITHIN 5 WHERE " & _
"TargetInstance ISA 'CIM_DataFile'" & _
" AND TargetInstance.Drive = 'e:'" & _
" AND TargetInstance.Path = '\\shares\\Admins docs\\'")
По этому запросу мы получаем список евентов удавлетваряющему этим условиям, если провести аналогию к T-SQL и привести запрос к виду:
Код:
Set objEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceOperationEvent WITHIN 5 WHERE " & _
"TargetInstance ISA 'CIM_DataFile'" & _
" AND TargetInstance.Drive = 'e:'" & _
" AND TargetInstance.Path Like '\\shares\\Admins docs\\%'")
("SELECT * FROM __InstanceOperationEvent WITHIN 5 WHERE " & _
"TargetInstance ISA 'CIM_DataFile'" & _
" AND TargetInstance.Drive = 'e:'" & _
" AND TargetInstance.Path Like '\\shares\\Admins docs\\%'")
то в принципе мы должны уже собирать все евенты где в TargetInstance.Path присутствует кусок "\\shares\\Admins docs\\", а следовательно он будет присутствовать в путях всех сабдеррикторий.
Вот только на практике эт чет не работает.
Цитата: teCa
По VBScript'у тут можно спросить?
А WEB-программирование то тут при чем?
http://www.computerperformance.co.uk/vbscript/wmi.htm там слева мнавигация, есть логи, вот там на примере разбирается просмотр логов создания файлов и директорий... вот попробуй оттуда плясать...
Цитата: ProgSoldier
А WEB-программирование то тут при чем?
я хз, но на ЦитФоруме пишут что VBScript имеет отношение к Web-программированию :) да и тем более чела из Basic раздела послали ))))
[quote=CitForum]
VBScript позволяет решать задачи, связанные с Internet, а именно создавать сценарии (или скрипты) управления объектами (кнопками, списками, ниспадающими меню и т. д.) на Web-страничках.
[/quote]
ЗЫ: ][отя задача явно не из Web-программинга )))))))))
Тогда будем через WMI Апач-треды юзать :) или ХТМЛ страницы парсить :) Ладно. проехали
Цитата: Тень Пса
http://www.computerperformance.co.uk/vbscript/wmi.htm там слева мнавигация, есть логи, вот там на примере разбирается просмотр логов создания файлов и директорий... вот попробуй оттуда плясать...
А вот сцылочка ооочень полезная. Спасибо, себе в фавориты запихнул
Такое ощущение, что WMI вообще не кто не знает, вопрос был озвучен наверное на шести различных форумах, в том числе, sql.ru и vbstreet.ru - за неделю не кто так и не отписался по этому поводу(((((
1) Сканирование директорий рекурсивно и сравнение с результатами записи предудущего прохода, если они есть.
2) Запись результатов (какие директории, какие файлы есть, размер, дата модификации, можно контрольную сумму для верности) прохода куда нибудь (хоть в файл, каждая строка которого - запись).
3) Сответственно все нестыковки отправляем по почте.
ЗЫ. В русском языке не слова дерректории
Код:
sPath = "\\Server\Drive$\Folder1\Folder2\Folder3"
sComputer = split(sPath,"\")(2)
sDrive = split(sPath,"\")(3)
sDrive = REPLACE(sDrive, "$", ":")
sFolders = split(sPath,"$")(1)
sFolders = REPLACE(sFolders, "\", "\\") & "\\"
Set objWMIService = GetObject("winmgmts:\\" & sComputer & "\root
\cimv2")
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceOperationEvent WITHIN 1 WHERE " _
& "TargetInstance ISA 'CIM_DataFile' AND " _
& "TargetInstance.Drive='" & sDrive & "' AND " _
& "TargetInstance.Path='" & sFolders & "'")
Wscript.Echo vbCrlf & Now & vbTab & _
Do
Set objLatestEvent = colMonitoredEvents.NextEvent
Select Case objLatestEvent.Path_.Class
Case "__InstanceCreationEvent"
WScript.Echo Now & vbTab & objLatestEvent.TargetInstance.FileName
_
& " was created" & vbCrlf
Case "__InstanceDeletionEvent"
WScript.Echo Now & vbTab & objLatestEvent.TargetInstance.FileName
_
& " was deleted" & vbCrlf
Case "__InstanceModificationEvent"
If objLatestEvent.TargetInstance.LastModified <> _
objLatestEvent.PreviousInstance.LastModified then
WScript.Echo Now & vbTab &
objLatestEvent.TargetInstance.FileName _
& " was modified" & vbCrlf
End If
IF objLatestEvent.TargetInstance.LastAccessed <> _
objLatestEvent.PreviousInstance.LastAccessed then
WScript.Echo Now & vbTab &
objLatestEvent.TargetInstance.FileName _
& " was accessed" & vbCrlf
End If
End Select
Loop
Set objWMIService = nothing
Set colMonitoredEvents = nothing
Set objLatestEvent = nothing
sComputer = split(sPath,"\")(2)
sDrive = split(sPath,"\")(3)
sDrive = REPLACE(sDrive, "$", ":")
sFolders = split(sPath,"$")(1)
sFolders = REPLACE(sFolders, "\", "\\") & "\\"
Set objWMIService = GetObject("winmgmts:\\" & sComputer & "\root
\cimv2")
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceOperationEvent WITHIN 1 WHERE " _
& "TargetInstance ISA 'CIM_DataFile' AND " _
& "TargetInstance.Drive='" & sDrive & "' AND " _
& "TargetInstance.Path='" & sFolders & "'")
Wscript.Echo vbCrlf & Now & vbTab & _
Do
Set objLatestEvent = colMonitoredEvents.NextEvent
Select Case objLatestEvent.Path_.Class
Case "__InstanceCreationEvent"
WScript.Echo Now & vbTab & objLatestEvent.TargetInstance.FileName
_
& " was created" & vbCrlf
Case "__InstanceDeletionEvent"
WScript.Echo Now & vbTab & objLatestEvent.TargetInstance.FileName
_
& " was deleted" & vbCrlf
Case "__InstanceModificationEvent"
If objLatestEvent.TargetInstance.LastModified <> _
objLatestEvent.PreviousInstance.LastModified then
WScript.Echo Now & vbTab &
objLatestEvent.TargetInstance.FileName _
& " was modified" & vbCrlf
End If
IF objLatestEvent.TargetInstance.LastAccessed <> _
objLatestEvent.PreviousInstance.LastAccessed then
WScript.Echo Now & vbTab &
objLatestEvent.TargetInstance.FileName _
& " was accessed" & vbCrlf
End If
End Select
Loop
Set objWMIService = nothing
Set colMonitoredEvents = nothing
Set objLatestEvent = nothing
Полезные сЦылки:
http://www.microsoft.com/technet/scriptcenter/resources/qanda/apr05/hey0404.mspx
http://www.microsoft.com/technet/scriptcenter/guide/sas_fil_impx.mspx?mfr=true
http://www.microsoft.com/technet/scriptcenter/guide/sas_fil_lifi.mspx
http://www.microsoft.com/technet/scriptcenter/guide/sas_fil_unip.mspx
А это - если еще и реестр надо мониторить:
[COLOR=#285a99]http://www.microsoft.com/technet/scriptcenter/guide/sas_reg_pxip.mspx[/COLOR]
[COLOR=#285a99]http://www.microsoft.com/technet/scriptcenter/guide/sas_reg_ufzz.mspx[/COLOR]
[COLOR=#285a99]http://www.microsoft.com/technet/scriptcenter/guide/sas_reg_teyz.mspx[/COLOR]
Так что вы собираетесь мониторить?
Я тоже когда-то увлекся мониторингом, еще и про изменения на мыло отсылал:
Цитата:
Set objEmail = CreateObject("CDO.Message")
objEmail.From = "lammer@fakesite.ru"
objEmail.To = "admin@thissite.ru"
objEmail.Subject = "Your site is down"
objEmail.Textbody = "codenet is no longer accessible over the network. "
objEmail.Send