Что нового

Найти новый файл в папке

Intel8086

Новичок
Сообщения
5
Репутация
0
Итак, задача, есть папка куда постоянно попадают файлы с разным названием, необходимо средствами AutoIt мониторить данную папку и записывать в отдельный текстовый файл (*.txt) все появившиеся новые файлы в данной папке, как вариант пробовал :

Код:
$timer = TimerInit()
$inputDir = "C:"
$fileList = _FileListToArray($inputDir, '*', 1)
If IsArray($fileList) And $fileList[0] > 0 Then
    Dim $aTmp[UBound($fileList)][2]
    For $i = 1 To $fileList[0]
        $aTmp[$i][1] = $inputDir & '\' & $fileList[$i]
        $aTmp[$i][0] = FileGetTime($aTmp[$i][1], 0, 1)
    Next
    _ArraySort($aTmp, 1, 1)
    MsgBox(0, "", "Самый новый файл: " & $aTmp[1][1])
EndIf


но это не то, показывает только измененные файлы.... у кого какие идеи ?
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Это как бы каркас, и то, если правильно понял.
Т.е. у меня это вот так получилось,только не стал тратитить
время на код сравнения массивов (имен файлов) - кто новый, а кто и вообще удален.
Код:
#Include <File.au3>
#Include <Array.au3>

$timer = TimerInit()
$inputDir = "C:"
MyFunc1()

Func MyFunc1()
$fileList1 = _FileListToArray($inputDir, '*', 1)
If IsArray($fileList1) And $fileList1[0] > 0 Then    
	Global $Var1 = UBound($fileList1)
	MyFunc2()
EndIf
EndFunc

Func MyFunc2()
While 1
	Sleep(500)
	$fileList2 = _FileListToArray($inputDir, '*', 1)
	Global $Var2 = UBound($fileList2)
	If $Var1 < $Var2 Then
		MsgBox(64, "Инфо", "Добавился новый файл")
		MyFunc3()	
		MyFunc1()
	EndIf
	
	If $Var1 > $Var2 Then
		MsgBox(64, "Инфо", "Удалены некоторые файлы")
		MyFunc3()
		MyFunc1()
	EndIf
	
	MyFunc1()	
WEnd
EndFunc

Func MyFunc3()
	;тут код сравнения массивов $fileList1 с $fileList2 на предмет: добавился или удалился определеный файл (имя)
	;и пишем результат в лог
	;сейчас этот код мне уже вряд ли удасться написать	
	_FileWriteLog(@ScriptDir & "\my.log","Next file")		
EndFunc

Выход из программы/скрипта не делал. По иконке в трее выходим.
Вроде, ничего так, работает.
 

AZJIO

Меценат
Меценат
Сообщения
2,892
Репутация
1,196
Intel8086

Первоначально сделал так

Код:
; RecFileListToArray.au3 можно взять по ниже указанной ссылке
;http://www.autoitscript.com/forum/topic/126198-recfilelisttoarray-new-version-6-mar-11/
#include "RecFileListToArray.au3"
#include <Array.au3>

$Path=@ScriptDir&'\test' ; папка в которой контролируются файлы (появление, удаление)
; $Path=@TempDir
; $Path=@WindowsDir
$file = FileOpen(@ScriptDir&'\file.log',1) ; путь к файлу в котором ведётся лог
HotKeySet("{ESC}", "_Exit")
Func _Exit()
	FileClose($file)
    Exit
EndFunc

$aFile0 = _RecFileListToArray($Path, "*", 1, 1, 0, 2)
If @error Then Dim $aFile0[1]=[0]
While 1
	$aFile1 = _RecFileListToArray($Path, "*", 1, 1, 0, 2)
	If @error Then
		Dim $aFile1[1]
		$aFile1[0]=0
	EndIf
	$aNew=_Compare($aFile0, $aFile1)
	If $aNew[0] <> '/' Then
		FileWrite($file,  @CRLF&@CRLF&@YEAR&"."&@MON&"."&@MDAY&" - "&@HOUR&":"&@MIN&":"&@SEC&@CRLF& _ArrayToString($aNew, @CRLF))
	EndIf
	$aFile0=$aFile1
	Sleep(500) ; промежуток времени, через который выполняется проверка (пол-секунды это для теста, в реальности это слишком часто)
WEnd


Func _Compare($aFile0, $aFile1)
	Local $k, $m, $i

	Assign('/', 2, 1)

	If $aFile0[0]<>0 Then
		For $i = 1 To $aFile0[0]
			Assign($aFile0[$i]&'/', Eval($aFile0[$i]&'/')+1, 1)
		Next
	EndIf

	; проверка добавленных файлов
	$m=0
	If $aFile1[0]<>0 Then
		For $i = 1 To $aFile1[0]
			Assign($aFile1[$i]&'/', Eval($aFile1[$i]&'/')+1, 1)
			If Eval($aFile1[$i]&'/') = 1 Then
				$aFile1[$m]='+ '&$aFile1[$i]
				$m+=1
			EndIf
		Next
	EndIf
	If $m <> 0 Then ReDim $aFile1[$m]
	
	; проверка удалённых файлов
	$k=0
	If $aFile0[0]<>0 Then
		For $i = 1 To $aFile0[0]
			If Eval($aFile0[$i]&'/') = 1 Then
				$aFile0[$k]='- '&$aFile0[$i]
				$k+=1
			EndIf
		Next
	EndIf
	If $k <> 0 Then ReDim $aFile0[$k]

	; объединение результата
	Select
		Case $k = 0 And $m = 0
			ReDim $aFile1[1]
			$aFile1[0]='/'
		Case $k<>0 And $m<>0
			_ArrayConcatenate($aFile1, $aFile0)
		Case $k<>0 And $m=0
			$aFile1=$aFile0
	EndSelect
	
	Return $aFile1
EndFunc


Но при мониторинге каталога с большим количеством файлов за короткий промежуток времени происходит лишний раз перебор всех файлов и процессор будет работать на полную катушку, поэтому использовал UDF - FileSystemMonitor, уже можно мониторить объёмные папки.

Код:
; UDF - FileSystemMonitor по ниже указанной ссылке, изменил AZJIO
; http://www.autoitscript.com/forum/index.php?showtopic=113560&st=0

; RecFileListToArray.au3 можно взять по ниже указанной ссылке
;http://www.autoitscript.com/forum/topic/126198-recfilelisttoarray-new-version-6-mar-11/
#include "RecFileListToArray.au3"
#include <Array.au3>

Global $pDirEvents, $hDir, $pOverLapped, $tFNI, $pBuffer, $TrCh, $iBufferSize, $tOverLapped, $tBuffer, $tDirEvents, $iDirEvents, $hEvent

 ; $Path - папка в которой контролируются файлы (появление, удаление)
; $Path=@ScriptDir&'\test'
; $Path=@TempDir
$Path=@WindowsDir
$file = FileOpen(@ScriptDir&'\file.log',1) ; путь к файлу в котором ведётся лог
HotKeySet("{ESC}", "_Exit")
Func _Exit()
	FileClose($file)
    Exit
EndFunc

$aFile0 = _RecFileListToArray($Path, "*", 1, 1, 0, 2)
If @error Then Dim $aFile0[1]=[0]

_FileSysMonSetup(@WindowsDir)
While 1
	$TrCh=_FileSysMonDirEventHandler()
	If $TrCh Then
		$aFile1 = _RecFileListToArray($Path, "*", 1, 1, 0, 2)
		If @error Then
			Dim $aFile1[1]
			$aFile1[0]=0
		EndIf
		$aNew=_Compare($aFile0, $aFile1)
		If $aNew[0] <> '/' Then
			FileWrite($file,  @CRLF&@CRLF&@YEAR&"."&@MON&"."&@MDAY&" - "&@HOUR&":"&@MIN&":"&@SEC&@CRLF& _ArrayToString($aNew, @CRLF))
		EndIf
		$aFile0=$aFile1
	EndIf
	Sleep(1000)
WEnd

Func _FileSysMonSetup($sdir = @ScriptDir)
		$tBuffer = DllStructCreate("byte[4096]")
		$pBuffer = DllStructGetPtr($tBuffer)
		$iBufferSize = DllStructGetSize($tBuffer)
		$tFNI = 0
		$hDir = DllCall("kernel32.dll", "hwnd", "CreateFile", "Str", $sdir, "Int", 0x1, "Int", BitOR(0x1, 0x4, 0x2), "ptr", 0, "int", 0x3, "int", BitOR(0x2000000, 0x40000000), "int", 0)
		$hDir = $hDir[0]
		$tReadLen = DllStructCreate("dword ReadLen")
		$tOverLapped = DllStructCreate("Uint OL1;Uint OL2; Uint OL3; Uint OL4; hwnd OL5")
		For $i = 1 To 5
			DllStructSetData($tOverLapped, $i, 0)
		Next
		$pOverLapped = DllStructGetPtr($tOverLapped)
		$iOverLappedSize = DllStructGetSize($tOverLapped)
		$tDirEvents = DllStructCreate("hwnd DirEvents")
		$pDirEvents = DllStructGetPtr($tDirEvents)
		$iDirEvents = DllStructGetSize($tDirEvents)
		$hEvent = DllCall("kernel32.dll", "hwnd", "CreateEvent", "UInt", 0, "Int", True, "Int", False, "UInt", 0)
		DllStructSetData($tOverLapped, 5, $hEvent[0])
		DllStructSetData($tDirEvents, 1, $hEvent[0])
		$ret = DllCall("kernel32.dll", "Int", "ReadDirectoryChangesW", "hwnd", $hDir, "ptr", $pBuffer, "dword", $iBufferSize, "int", False, "dword", BitOR(0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x100), "Uint", 0, "Uint", $pOverLapped, "Uint", 0)
	Return True
EndFunc   ;==>_FileSysMonSetup

Func _FileSysMonDirEventHandler()
	Local $ret, $r
	$r = DllCall("User32.dll", "dword", "MsgWaitForMultipleObjectsEx", "dword", 1, "ptr", $pDirEvents, "dword", 100, "dword", 0x4FF, "dword", 0x6)
	If $r[0] = 0 Then
		$ret = DllCall("kernel32.dll", "Int", "ReadDirectoryChangesW", "hwnd", $hDir, "ptr", $pBuffer, "dword", $iBufferSize, "int", False, "dword", BitOR(0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x100), "Uint", 0, "Uint", $pOverLapped, "Uint", 0)
		If $ret[0] = 1 Then Return True
	EndIf
	Return False
EndFunc   ;==>_FileSysMonDirEventHandler

Func _Compare($aFile0, $aFile1)
	Local $k, $m, $i
	Assign('/', 2, 1)

	If $aFile0[0]<>0 Then
		For $i = 1 To $aFile0[0]
			Assign($aFile0[$i]&'/', Eval($aFile0[$i]&'/')+1, 1)
		Next
	EndIf

	; проверка добавленных файлов
	$m=0
	If $aFile1[0]<>0 Then
		For $i = 1 To $aFile1[0]
			Assign($aFile1[$i]&'/', Eval($aFile1[$i]&'/')+1, 1)
			If Eval($aFile1[$i]&'/') = 1 Then
				$aFile1[$m]='+ '&$aFile1[$i]
				$m+=1
			EndIf
		Next
	EndIf
	If $m <> 0 Then ReDim $aFile1[$m]
	
	; проверка удалённых файлов
	$k=0
	If $aFile0[0]<>0 Then
		For $i = 1 To $aFile0[0]
			If Eval($aFile0[$i]&'/') = 1 Then
				$aFile0[$k]='- '&$aFile0[$i]
				$k+=1
			EndIf
		Next
	EndIf
	If $k <> 0 Then ReDim $aFile0[$k]

	; объединение результата
	Select
		Case $k = 0 And $m = 0
			ReDim $aFile1[1]
			$aFile1[0]='/'
		Case $k<>0 And $m<>0
			_ArrayConcatenate($aFile1, $aFile0)
		Case $k<>0 And $m=0
			$aFile1=$aFile0
	EndSelect
	
	Return $aFile1
EndFunc
 

VladUs

Скриптер
Сообщения
621
Репутация
182
Пример подписки на события WMI, для мониторинга создания, и удаления файлов в определенной директории:

Код:
#include <Date.au3>
#include <file.au3>

local $objAsyncContext, $objEvent, $szDrive, $szDir, $szFName, $szExt
 
$sPath = "C:\Windows" ; Путь к папке, которую необходимо мониторить
$sPathStr = StringReplace ( $sPath, "\", "\\\\" )
 
$objWMIService = ObjGet("winmgmts:" & "!\\" & @ComputerName & "\root\cimv2")
$strQuery = "SELECT * FROM __InstanceOperationEvent WITHIN 1 WHERE " _
         & "Targetinstance ISA 'CIM_DirectoryContainsFile' and " _
			& "TargetInstance.GroupComponent= " _
			& "'Win32_Directory.Name=""" &  $sPathStr &  """'" 

$Sink = ObjCreate( "WbemScripting.SWbemSink")
ObjEvent($Sink , "SINK_")
$objContext = ObjCreate("WbemScripting.SWbemNamedValueSet")
$objWMIService.ExecNotificationQueryAsync ($SINK, $strQuery, Default, Default, Default, $objContext)
	
While 1
    Sleep(1000)
Wend

Func SINK_OnObjectReady($objEvent, $objAsyncContext)
Select
	Case $objEvent.Path_.Class()="__InstanceCreationEvent"
		 _PathSplit($objEvent.TargetInstance.PartComponent(), $szDrive,  $szDir, $szFName,  $szExt)
		ConsoleWrite ("В директории "& $sPath & " cоздан Файл """ &  $szFName  & $szExt &  @CR)
		ConsoleWrite ("Время создания "& _Now() & @CR)
	Case $objEvent.Path_.Class()="__InstanceDeletionEvent"
		_PathSplit($objEvent.TargetInstance.PartComponent(), $szDrive,  $szDir, $szFName,  $szExt)
		ConsoleWrite ("В директории "& $sPath & " Удален Файл """  & $szFName  & $szExt &  @CR)
		ConsoleWrite ("Время удаления "& _Now() & @CR)
EndSelect
EndFunc
 
Автор
I

Intel8086

Новичок
Сообщения
5
Репутация
0
спасибо, на основе ваших ответов буду разрабатывать программу
 

BaRsupillamy

Новичок
Сообщения
58
Репутация
0
VladUs, AZJIO, а работают ли ваши скрипты для подпапок?
мне, например, надо следить за папкой, в которой ещё два уровня вложенности... там папки пронумерованы по датам... объём данных около терабайта... старые файлы удаляются, новые появляются... надо следить и за удалением и за появлением... и при этих действиях определённым образом писать лог из имён файлов... такое возможно?
 

AZJIO

Меценат
Меценат
Сообщения
2,892
Репутация
1,196
BaRsupillamy
Работает, но мой скрипт тебе категорически нельзя использовать. Я оставил свой пример как вариант, например если программа не была запущена и при этом появились новые файлы, то можно сравнить сохранённый список с текущим состоянием, что не позволяет вариант VladUs, но его пример в данном контексте более предпочтительнее, так как срабатывает на обращение к диску и выдаёт лог изменений, а мой просто запускает проверку всех файлов на диске сверяя его с предыдущим списком и на теребайтнике это может занять длительное время.
 

BaRsupillamy

Новичок
Сообщения
58
Репутация
0
я тоже попытался сделать свой вариант с сохранением информации в файл... причём, для удобства обращения делал в INI... первое выполнении прошло за 13 минут... а вот второй прогон, видимо, из за использования FOR'ов удлинился на слишком большое время... более получаса... а хочется добиться как раз таки быстрого повторного сканирования... на первое я могу потратить время...
что то у меня пример VladUsa совсем не заработал... запускается, в трее висит, но ничего непроисходит ни при изменениях в папке, ни при изменениях в подпапках... как не смотрел в код, не понял из за чего такое может быть... подскажите, чего может не хватать...
P.S. Что он вообще делать то должен? как новичок, не могу понять... он пишет в лог изменения, или сообщение выводит?
 

AZJIO

Меценат
Меценат
Сообщения
2,892
Репутация
1,196
BaRsupillamy
В консоль SciTE при запуске его из редактора по клавише F5. Попробуй догадайся, поэтому я не использую консоль...
 

BaRsupillamy

Новичок
Сообщения
58
Репутация
0
а я вижу, что про консоль, но никогда бы там не посмотрел спецом... а случайно вот не заметил :smile:
ясно :smile: спасибо Вам... щас буду пробовать...
когда то на Яве у меня был чей то код для слежения за папкой... и при появлении в папке новых файлов срабатывала программа... надо и тут что то похожее реализовать...
а ещё, наверно, и мне полезен вот этот совет :smile: http://autoit-script.ru/index.php?topic=6493.msg45208#msg45208


Добавлено:
Сообщение автоматически объединено:

работает в принципе хорошо... но только для корня указанной папки... а как сделать для подпапок?
получится ли? потому что у меня как бы одновременно файлы будут появляться в нескольких папках...
это система видеонаблюдения, которая пишет в 16 папок, допустим, и удаляет из папок старых дат в то же время...
помогите, пожалуйста...

P.S. думал, может прикрутить как то к конечным папкам ваш скрипт... но вряд ли такое сработает... конечных папок на одном винчестере может быть 16*30... т.е. почти 500.. и есть вероятность, что на втором винчестере будет столько же... т.е. у меня ещё есть проблема со слежением за двумя разными папками...
 

AZJIO

Меценат
Меценат
Сообщения
2,892
Репутация
1,196
BaRsupillamy
Сколько файлов на диске? У меня 12000 файлов в папке Windows обрабатывает за 0,28 сек. Если контент из крупных файлов, то вполне возможно мой вариант использовать.
 

BaRsupillamy

Новичок
Сообщения
58
Репутация
0
я видел, видимо, ваше сообщение о 12000 файлах за такое короткое время... по сравнению с моей у вас, наверно, мощная техника... у меня рабочий комп весьма древний... а на тех, на которых будут эти самые файлы искаться, видео пишеться и кодируется... хотя сейчас парк машин и обновляется... ну, надо взять ваш скрипт точный и у себя запустить, чтобы проверить и соотнести...
файлы достаточно крупные... но всё таки, их, наверно, будет ну очень много... так что даже не знаю, что мне и как сделать... сразу задача не представлялась сложной... хотя есть и ещё проблемы в реализации следующих идей: после обработки файлов, я получаю массивы нулей и единиц... планировал на 144 отсчёта... 144 = 24*6... т.е. один отсчёт равен 10 минутам... каждый отсчёт показывает, велась ли в эти 10 минут запись... и вот потом я хотел отобразить эти отсчёты красиво... типа прогресс-бара... думал сделать таблицу на 144 столбца и раскрасить в зависимости от 0 и 1 красным и зелёным... но на моей древней рабочей машинке таблица на 144 столбца с трудом рисуется... и надо же ещё таких 16 строк...
ну буду думать, двигаться вперёд и. может быть, в итоге что нибудь да родиться...
ещё думал о возможности сканирования папок на удалённых компах, сохранении результата в файл, а потом анализе файла на другой машине...
спасибо Вам за помощь...
 

BaRsupillamy

Новичок
Сообщения
58
Репутация
0
посчитал... оговорюсь, что терабайт - это предельный случай... обычно объёмы меньше... но это опять таки пока, парк машин обновляется... ну и я решил сразу рассматривать крайний случай... на остальных то всё будет быстрее...
так вот... папок у меня, как и писал выше, около 450... т.е. за месяц 16*30... н и там кое где есть уже пустые... взвесил несколько папок, получилось в среднем около 350 файлов... т.е. у меня надо обрабатывать приблизительно 150 000 файлов...
поэтому я и делал список из папок и их размеров... потом брал этот список, снова сканировал папки и сравнивал их... т.е. цикл делал по старому списку, это 450 папок, и прогонял по каждому новый из 450... оч долго выходит...
вот пока писал это, понял, как можно сделать... так и думал вначале, а потом сделал так, как описал выше и вот почему... можно делать в обратном порядке... просканировать папку, записать новые значения в тот же INI файл... потом по очереди в цикле брать новые значения, сравнивать со старыми... старые будут идти не по циклу, а запрашивать параметр из файла... при нахождении сравнивать размер, при совпадении удалять из списка новых, при не совпадении не удалять... после прогона реализовано сканирование папок, оставшихся в секции New... в этом варианте проблема остаётся только в том, что я не знаю, какие папки удалены...

вот пока писал, и родилось... а если сначала прогнать циклом старый список с поиском ключей в новом... тоже ведь пролучится тоже самое... мы получаем два цикла по 450 папок, а не 450 по 450... ну и просканировать придётся около 30 папок скорее всего, у которых изменится размер (планировал скрипт запускать раз в час)...
как вам кажется? достоин ли вариант чего нибудь?


Добавлено:
Сообщение автоматически объединено:

и останется одна беда - реализовать всё это не в одной папке, а в нескольких... мне фактически надо всего лишь объединить будет несколько массивов в один... :smile: пока начну реализовывать...
 

AZJIO

Меценат
Меценат
Сообщения
2,892
Репутация
1,196
BaRsupillamy
Сколько папок, столько и массивов, сравнить можно поочереди. Можешь попробовать мою UDF поиска всех файлов, вместо RecFileListToArray.au3, получится в 2 раза быстрее.
 

BaRsupillamy

Новичок
Сообщения
58
Репутация
0
спасибо, хотя скорее всего я использую её прародительницу, но возьму эту UDF полностью...

сейчас объясню, почему не получается использовать массивы по очереди, по крайней мере пока что в моём представлении...
у меня хранится в INI старая информация... выглядит так
[Archiv]
Folder1=Size
Folder2=Size
запускаем скрипт... сканируем папку, получаем массив... записываем его в этот же файл, только в секцию New
[Archiv]
Folder1=Size
Folder2=Size
дальше пока нет ничего, пока нет времени, но вот планирую что сделать...
считываем секцию Archiv и в цикле проверяем наличие каждого ключа в секции New... те, которых нет в New или размер в New = 0, удаляем из архива - это уже удалённые данные... потом делаем в обратном порядке... циклом по New проверяем есть ли их копия в Archiv... и удаляем из New те, которые есть в Архиве и совпадает размер... если нет в рахиве или не совпадает размер, то оставляем в New...
ну и всё... два цикла... на выходе получаем в INI две секции Archiv и New... потом сканируем всё, что осталось в New и записываем данные в Архив... а New очищаем...

так вот... если взять две папки на двух разных дисках и просканировать, то получится, что при работе со второй папкой в New нет ни одной папки как в архиве и они все удалятся, как отсутствующие или пустые...
как то так это у меня в голове сформировано...
буду думать...
буду рад любой помощи и любым подсказкам...
 

AZJIO

Меценат
Меценат
Сообщения
2,892
Репутация
1,196
BaRsupillamy
Их не надо соединять в один массив, каждый массив проверяется с предыдущей копией своего массива. Можно на конверенции обсудить.
Не надо в ini, используй _FileWriteFromArray для записи массива в файл и _FileReadToArray для чтения. Метод сравнения который в моём примере на порядок быстрее чем метод сравнения массива поэлементно.
 

BaRsupillamy

Новичок
Сообщения
58
Репутация
0
насчёт конференции я подумаю... надо как то с рабочего инета туда попасть... через прокси...
хм... как то даже не вспомнил о функциях для записи и чтения сразу в файл... надо посмотреть и опробовать...
просто смотри, как я планировал и почему именно инишку взял... я беру из массива одного первый элемент и он является ключом в ини-файле.... интересно просто, как работает автоит с ини? он всё равно парсит и бежит по всему файлу? т.е. я его использовать хотел, потому что парится не надо со сравнением и поиском - спросил про ключ с именем, если есть - здорово, если нет - получим значение по умолчанию...
изучу по твоему совету UDF...
 

VladUs

Скриптер
Сообщения
621
Репутация
182
BaRsupillamy
Если хотите, можете использовать скрипт, написанный на PowerShell. В скрипте используется объект .NET Framework FileSystemWatcher, который позволяет
мониторить папки, подпапки или хоть весь логический диск на предмет создания или удаления файлов и папок. И все это удовольствие решается пятнадцатью строчками кода.
Единственный недостаток - на целевах ПК должен быть установлен .NET Framework и, естественно, PowerShell

Код:
Clear-Host
$folder = 'C:\Test' # Папка для мониторинга
$filter = '*.*'                            
$destination = '<full path to the destination folder>'
$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{
 IncludeSubdirectories = $true              
}
$onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
 $path = $Event.SourceEventArgs.FullPath
 $changeType = $Event.SourceEventArgs.ChangeType
 $timeStamp = $Event.TimeGenerated
 Write-Host "Файл '$path'  Создан в $timeStamp"
 add-Content -Path C:\test123.txt -Value  "Файл '$path'  Создан в $timeStamp"  # 'C:\test123.txt' - файл, куда будет писаться лог
}
 

BaRsupillamy

Новичок
Сообщения
58
Репутация
0
VladUs, немного сложновато будет... все компы, где предполагается выполнение этого скрипта я могу достать только по удалёнке... Радмин или НСМ... но спасибо за варианты, я буду пробовать... возможно, и воспользуюсь... ещё упираемся в производительность, потому что машины не очень и пишут круглосуточно потоковое видео с 16 камер, которое на лету обрабатывается, сжимается... но посмотрим :smile: сегодня не хватило времени реализовать своё... завтра буду пробовать дописать, то что придумал, а там посмотрю, хватит ли мне этого...
мониторить в реальном времени было бы вообще здорово...
 
Верх