Назад | Перейти на главную страницу

Запишите больше событий с помощью procmon

«Монитор процессов» имеет максимальную глубину истории 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. Если это не так, то вы знаете, что пора снова запустить его в новом подкаталоге.

Изменить: Да, я думаю, что он просто начинает катиться, как только достигает глубины истории ... так что сделайте размер файла.