«Монитор процессов» имеет максимальную глубину истории 199 миллионов событий. Мне нужно записать это примерно 10 раз. Я не против, если данные будут разделены, например новый набор данных на каждый час. Кто-нибудь знает, как это сделать? Я предполагаю, что это командный файл с файлами резервной копии, которые будут размещаться в папках с последовательными именами. Есть ли способ определить, как только Process Monitor заполнил свою историю, чтобы убить его, или мне просто нужно спать?
Да, вам придется написать сценарий. Я проделал подобную работу с Procmon и раньше, но моя цель не заключалась в захвате миллиардов событий. Тем не менее, это должно помочь вам, если вам не нужен кто-то, кто написал бы для вас сценарий:
Создайте сценарий VBscript, который запускается каждые 5 минут. Планировщик заданий может помочь вам в этом.
Если это первый запуск сценария, запустите Procmon следующим образом:
objShell.Run "Cmd /C " & PRM_ProcMonExe & " /quiet /minimized /AcceptEula /backingfile " & PRM_PMLDir & "Procmon" & subDir & ".pml"
Затем при последующих запусках скрипта измерьте общий размер всех файлов * .pml в подкаталоге.
If ProcMonTriggered = True And ProcMonTerminated = False Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(PRM_PMLDir)
Set objFiles = objFolder.Files
For Each objItem In objFiles
If UCase(objFSO.GetExtensionName(objItem.Name)) = "PML" Then
totalPMLSize = totalPMLSize + objItem.Size
End If
Next
If totalPMLSize > (PRM_PMLMaxSize * 1073741824) Then
NQExt.CreateEvent PRM_TriggeredSev, "ProcMon Terminated", "AKP_NULL", gstrEventTarget, 0.0, "Process Monitor was terminated because the PML file reached the limit of " & PRM_PMLMaxSize & "GB." & vbCrlf & "Process Monitor cannot be triggered again until this script is re-deployed." & vbCrlf & "Please see KB " & PRM_KBArticle, "", 0, 0
Set objShell = CreateObject("WScript.Shell")
objShell.Run "Cmd /C " & PRM_ProcMonExe & " /AcceptEula /terminate"
End If
If isObject(objFiles) Then Set objFiles = Nothing
If isObject(objFolder) Then Set objFolder = Nothing
If isObject(objShell) Then Set objShell = Nothing
If isObject(objFSO) Then Set objFSO = Nothing
ProcMonTerminated = True
End If
Это не специально для вашей ситуации. Вам придется его настроить. Это то, что я написал давным-давно с несколько другой целью. Что вы хотите сделать, так это если размер всех файлов * .pml в подкаталоге, добавленном вместе, не увеличился с момента последнего запуска скрипта ... тогда вы знаете, что пора завершить Procmon и запустить новый экземпляр.
Дело в том, что вы должны корректно завершить работу Procmon с помощью параметра / terminate, а не просто убить процесс, иначе журнал будет поврежден и нечитаем.
Затем запустите новый экземпляр procmon в новом подкаталоге. Творчество заставит вас создавать подкаталоги с добавочными именами, такими как subdir1, subdir2, subdir3 и т. Д.
Изменить: Кроме того, я никогда раньше не запускал Procmon до 200 миллионов событий, поэтому я не знаю, просто ли он сидит и ничего не делает после достижения 199 миллионов или полностью выключается. В последнем случае ваша работа будет проще. Просто проверьте, работает ли Procmon.exe. Если это не так, то вы знаете, что пора снова запустить его в новом подкаталоге.
Изменить: Да, я думаю, что он просто начинает катиться, как только достигает глубины истории ... так что сделайте размер файла.