用procmonlogging更多事件

“进程监视器”的最大历史logging深度为1.99亿个事件。 我需要logging10次左右。 我不介意数据是否分裂,例如每小时一个新的数据集。 任何人都知道如何做到这一点? 我猜测一个batch file,支持文件进入顺序命名文件夹。 有没有一种方法来检测一次进程监视器填充其历史深度杀死它,或者我只是需要睡觉?

是的,你将不得不编写脚本。 我之前和Procmon做过一些类似的工作,但是我的目标不是要捕捉数十亿的事件。 不过,除非你需要有人为你写脚本,否则这应该对你有所帮助:

创build一个每5分钟运行一次的VB脚本。 任务计划程序可以帮助你。

如果这是脚本第一次运行,那么启动Procmon,如下所示:

objShell.Run "Cmd /C " & PRM_ProcMonExe & " /quiet /minimized /AcceptEula /backingfile " & PRM_PMLDir & "Procmon" & subDir & ".pml" 

然后在脚本的后续运行中,测量subDir中所有* .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并启动一个新的实例了。

关键是你必须用/ terminate参数正常地终止Procmon,而不仅仅是终止进程,否则日志将被破坏并且不可读。

然后在新的子目录中启动一个新的procmon实例。 创造力将让你创造像subdir1,subdir2,subdir3等增量名称的子目录。

编辑:另外,我从来没有运行过2亿个Procmon事件,所以我不知道它是否在那里,在达到1.99亿之后什么都不做,或者它完全closures。 如果是后者,那么你的工作就更容易了。 只要检查Procmon.exe是否仍在运行。 如果不是,那么你知道是时候在新的子目录下重新启动了。

编辑:是的,我认为它刚刚开始滚动一旦它击中历史深度…所以文件大小的事情。