Что нового

Мониторинг файлов в папке

adiopv

Новичок
Сообщения
3
Репутация
0
Всем Привет!
Помогите пожалуйста!!! В интернете нашел скрипт для мониторинга файлов в папке. Он мониторит тока одну папку, а нужно чтобы он мониторил еще две-три папки. Еще нужно чтобы все записывал в лог файл. Заранее всем спасибо)
Код:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Change2CUI=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#include <file.au3>
#Include <Date.au3>
#Include <WinAPI.au3>
#Include <Crypt.au3>

AutoItSetOption("MustDeclareVars", 1)

Local $sFolder           = "e:\base\1"

Local $sComputer         = "."
Local $oSWbemLocator     = ObjCreate("WbemScripting.SWbemLocator")
Local $oSWbemServicesEx  = $oSWbemLocator.ConnectServer($sComputer, "root\cimv2")
Local $oSWbemObjectEx
Local $oSWbemSink        = ObjCreate("WbemScripting.SWbemSink")
Local $oSink             = ObjEvent($oSWbemSink, "Sink_")

Local $aSplitPath, $sDrive, $sDir, $sFileName, $sExtension
Local $dtNow, $sNow

Local $sMD5
Local $oDictionary       = ObjCreate("Scripting.Dictionary")


_PathSplit($sFolder & "\", $sDrive, $sDir, $sFileName, $sExtension)

$dtNow = _Date_Time_GetLocalTime()
$sNow  = _Date_Time_SystemTimeToDateTimeStr($dtNow, 1)

For $oSWbemObjectEx In $oSWbemServicesEx.ExecQuery( _
		"SELECT * FROM CIM_DataFile WHERE " & _
		"Drive = '" & $sDrive & "' AND " & _
		"Path = '" & StringReplace($sDir, "\", "\\") & "'" _
	)
	$sMD5 = _Crypt_HashFile($oSWbemObjectEx.Name, $CALG_MD5)

	$oDictionary.Add($oSWbemObjectEx.Name, $sMD5)
	ConsoleWrite($sNow & _WinAPI_WideCharToMultiByte(" |  | Present: [" & $oSWbemObjectEx.Name, 1) & "]" & @CRLF)
Next

$oSWbemServicesEx.ExecNotificationQueryAsync($oSWbemSink, _
	"SELECT * FROM __InstanceOperationEvent WITHIN 1 WHERE " & _
	"TargetInstance ISA 'CIM_DataFile' AND " & _
	"TargetInstance.Drive = '" & $sDrive & "' AND " & _
	"TargetInstance.Path = '" & StringReplace($sDir, "\", "\\") & "'" _
)

_Crypt_Startup()

Do
	Sleep(100)
Until(False)

_Crypt_Shutdown()

$oDictionary.RemoveAll

$oDictionary       = 0
$oSink             = 0
$oSWbemSink        = 0
$oSWbemServicesEx  = 0
$oSWbemLocator     = 0

Exit(0)

Func Sink_OnObjectReady($oSWbemObjectEx, $oSWbemAsyncContext)
	With $oSWbemObjectEx
		$dtNow = _Date_Time_GetLocalTime()
		$sNow  = _Date_Time_SystemTimeToDateTimeStr($dtNow, 1)

		Select
			Case .Path_.Class = "__InstanceCreationEvent"
				$sMD5 = _Crypt_HashFile(.TargetInstance.Name, $CALG_MD5)

				$oDictionary.Add(.TargetInstance.Name, $sMD5)
				ConsoleWrite($sNow & _WinAPI_WideCharToMultiByte(" |  | Create:  [" & .TargetInstance.Name, 1) & "]" & @CRLF)
			Case .Path_.Class = "__InstanceModificationEvent"
				$sMD5 = _Crypt_HashFile(.TargetInstance.Name, $CALG_MD5)

				If $oDictionary.Exists(.TargetInstance.Name) Then
					If $oDictionary.Item(.TargetInstance.Name) <> $sMD5 Then
						$oDictionary.Item(.TargetInstance.Name) = $sMD5
						ConsoleWrite($sNow & _WinAPI_WideCharToMultiByte(" |  | Modify:  [" & .TargetInstance.Name, 1) & "]" & @CRLF)
					EndIf
				Else
					$oDictionary.Add(.TargetInstance.Name, $sMD5)
					ConsoleWrite($sNow & _WinAPI_WideCharToMultiByte(" | ± | Modify:  [" & .TargetInstance.Name, 1) & "]" & @CRLF)
				EndIf
			Case .Path_.Class = "__InstanceDeletionEvent"
				$oDictionary.Remove(.TargetInstance.Name)
				ConsoleWrite($sNow & _WinAPI_WideCharToMultiByte(" |  | Delete:  [" & .TargetInstance.Name, 1) & "]" & @CRLF)
			Case Else
				; Nothing to do
		EndSelect
	EndWith
EndFunc
 

joiner

Модератор
Локальный модератор
Сообщения
3,570
Репутация
632
можно так
Код:
Local $aADF[2] = ["D:\base\1", "D:\base\2"]
Local $sComputer = "."
Local $oSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")
Local $oSWbemServicesEx = $oSWbemLocator.ConnectServer($sComputer, "root\cimv2")
Local $oSWbemObjectEx
Local $oSWbemSink = ObjCreate("WbemScripting.SWbemSink")
Local $oSink = ObjEvent($oSWbemSink, "Sink_")
Local $dtNow, $sNow
Local $sMD5
Local $oDictionary = ObjCreate("Scripting.Dictionary")
$dtNow = _Date_Time_GetLocalTime()
$sNow = _Date_Time_SystemTimeToDateTimeStr($dtNow, 1)
For $i = 0 To UBound($aADF) - 1
	Local $aSplitPath, $sDrive, $sDir, $sFileName, $sExtension
	_PathSplit($aADF[$i] & "\", $sDrive, $sDir, $sFileName, $sExtension)
	For $oSWbemObjectEx In $oSWbemServicesEx.ExecQuery( _
			"SELECT * FROM CIM_DataFile WHERE " & _
			"Drive = '" & $sDrive & "' AND " & _
			"Path = '" & StringReplace($sDir, "\", "\\") & "'" _
			)
		$sMD5 = _Crypt_HashFile($oSWbemObjectEx.Name, $CALG_MD5)

		$oDictionary.Add($oSWbemObjectEx.Name, $sMD5)
		ConsoleWrite($sNow & _WinAPI_WideCharToMultiByte(" |  | Present: [" & $oSWbemObjectEx.Name, 1) & "]" & @CRLF)
	Next

	$oSWbemServicesEx.ExecNotificationQueryAsync($oSWbemSink, _
			"SELECT * FROM __InstanceOperationEvent WITHIN 1 WHERE " & _
			"TargetInstance ISA 'CIM_DataFile' AND " & _
			"TargetInstance.Drive = '" & $sDrive & "' AND " & _
			"TargetInstance.Path = '" & StringReplace($sDir, "\", "\\") & "'" _
			)
Next
 
Автор
A

adiopv

Новичок
Сообщения
3
Репутация
0
Спасибо большое. Всё работает :ok:. Можно еще один вопрос? Вы не знаете как поменять цвет текста в консоле? Например надпись delete - красным, create - зеленым и т.д.
 
Верх