Starley25 Цитата: задача у меня стоит в проверке доступности файла через запуск скрипта на удаленной машине с использованием SCOM плюс к этому создание монитора и рождение алерта по событию. Поэтому в глубоком изучении скриптов у меня разбираться пока необходимости не было.
Скрипт запускается на любой машине (можно удалённой. параметр strComputer). Работает через WMI. Отслеживает наличие (в самом начале), изменение, удаление, создание файла в папке. Уведомляет нетсендом (Можно и почту отправлять, если чё).
[more=Тута скрипт]
Код: 'комп, где запускаем скрипт
strComputer = "TargetComp"
'комп, куда отсылаем сообщения
strAdminCompName = "YaOdminko"
strDrive = "e:"
strPath = "\\папка за которой следим\\"
strFileName = "файлО_за_которым_следим.txt"
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colFiles = objWMIService. _
ExecQuery("Select * From CIM_DataFile Where Name = '" & strDrive & strPath & strFileName & "'")
If colFiles.Count = 0 Then
MyNetSend("Нетути файла")
Else
MyNetSend("ФайлО на месте")
End If
Dim Body
Set objEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceOperationEvent WITHIN 5 WHERE " & _
"TargetInstance ISA 'CIM_DataFile'" & _
" AND TargetInstance.Drive = '" & strDrive & "'" & _
" AND TargetInstance.Hidden <> 1" & _
" AND TargetInstance.Path = '" & strPath & "'")
'Wscript.Echo "Ожидаем события ..."
Do While(True)
Set objLatestEvent = objEvents.NextEvent
Select Case objLatestEvent.Path_.Class
Case "__InstanceCreationEvent"
tmpFileName = objLatestEvent.TargetInstance.FileName _
& "." & objLatestEvent.TargetInstance.Extension
If LCase(tmpFileName) = LCase(strFileName) Then
Body = Now & vbTab & "Файл """ & tmpFileName & _
""" был создан" & vbCrLf
MyNetSend(Body)
End If
Case "__InstanceDeletionEvent"
tmpFileName = objLatestEvent.TargetInstance.FileName _
& "." & objLatestEvent.TargetInstance.Extension
If LCase(tmpFileName) = LCase(strFileName) Then
Body = Now & vbTab & "Файл """ & tmpFileName & _
""" был удалён" & vbCrLf
MyNetSend(Body)
End If
Case "__InstanceModificationEvent"
tmpFileName = objLatestEvent.TargetInstance.FileName _
& "." & objLatestEvent.TargetInstance.Extension
If objLatestEvent.TargetInstance.LastModified <> _
objLatestEvent.PreviousInstance.LastModified And _
LCase(tmpFileName) = LCase(strFileName) Then
Body = Now & vbTab & "Файл """ & tmpFileName & _
""" был изменён" & vbCrLf
MyNetSend(Body)
End If
End Select
Loop
'========== net send ===========
Function MyNetSend(strBody)
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "net send " & strAdminCompName & " " & strBody
End Function