Process Monitor 学习笔记(5.9):Procmon 的自动化操作——命令行选项
Process Monitor 学习笔记(5.9):Procmon 的自动化操作——命令行选项
- Process Monitor 学习笔记(5.9):Procmon 的自动化操作——命令行选项
- 1)什么时候用命令行而不是 GUI?
- 2)常用命令行开关总览
- 3)经典脚本模板
- A. 60 秒无人值守采集(CMD)
- B. 轮转切片采集(PowerShell,连抓 5 片,每片 2 分钟)
- C. 离线转换(PML → CSV)
- D. 一次到位:载入模板 + 写盘 + 立刻隐藏
- 4)和“配置模板”配合的要点
- 5)权限、体积与稳定性
- 6)常见组合与故障排查
- 7)团队落地清单
- 结语
Process Monitor 学习笔记(5.9):Procmon 的自动化操作——命令行选项
目标:把日常“点点点”的抓取流程,升级为一条命令就能跑的无人值守方案,用在值守排障、定时采集、远程协助、CI 机器上。
1)什么时候用命令行而不是 GUI?
- 无人值守:服务器/用户电脑上自动抓 2–10 分钟日志后自停并打包。
- 现场复现窗口极短:一键脚本就位,避免 GUI 慢半拍。
- 统一口径:所有同事按同一模板抓取,保证可比性。
- 长时间运行:结合轮转/切片策略,控制文件体积。
2)常用命令行开关总览
不同版本的 Procmon 细节可能略有差异,以下为实操中最常用、最稳定的一组。
开关 | 作用 | 示例 |
---|---|---|
/AcceptEula | 首次运行自动接受 EULA,避免交互弹窗 | procmon.exe /AcceptEula |
/Quiet | 静默启动,不弹过滤器对话框、错误提示最小化 | procmon.exe /Quiet |
/Minimized | 最小化到任务栏启动 | procmon.exe /Minimized |
/LoadConfig <pmc> | 载入事先导出的配置模板(过滤、高亮、列、选项) | procmon.exe /LoadConfig D:\pm\Team.pmc |
/BackingFile <pml> | 直接把采集写入 PML 文件(环形缓冲区由配置决定) | procmon.exe /BackingFile D:\logs\a.pml |
/OpenLog <pml> | 以 GUI 打开某个 PML | procmon.exe /OpenLog D:\logs\a.pml |
/SaveAs <目标> | 将当前打开的日志导出为 PML/CSV/XML(按扩展名决定) | procmon.exe /OpenLog a.pml /SaveAs a.csv |
/Terminate | 向已运行的 Procmon 发出“停止并退出”指令 | procmon.exe /Terminate |
小贴士
- 过滤/高亮等请放到
.pmc
模板里(上一节 5.8 已讲)。- 是否“丢弃被过滤事件(Drop Filtered Events)”、是否开启 Call Stacks 也由模板决定。
3)经典脚本模板
A. 60 秒无人值守采集(CMD)
@echo off
set "PM=C:\Tools\Sysinternals\procmon.exe"
set "CFG=D:\Procmon\Team-Default.pmc"
set "OUT=D:\ProcmonLogs\pm_%date:~0,4%-%date:~5,2%-%date:~8,2%_%time:~0,2%%time:~3,2%.pml""%PM%" /AcceptEula /Quiet /Minimized ^/LoadConfig "%CFG%" ^/BackingFile "%OUT%"rem — 采集 60 秒 —
timeout /t 60 /nobreak >nulrem — 停止并退出 —
"%PM%" /Terminateecho Log saved: %OUT%
适用:远程让用户双击即可;不需要 GUI 操作,采完自动停。
B. 轮转切片采集(PowerShell,连抓 5 片,每片 2 分钟)
$pm = "C:\Tools\Sysinternals\procmon.exe"
$cfg = "D:\Procmon\Longrun.pmc"
$dir = "D:\ProcmonLogs"
New-Item -Force -ItemType Directory $dir | Out-Null1..5 | ForEach-Object {$ts = (Get-Date).ToString("yyyyMMdd_HHmmss")$pml = Join-Path $dir "pm_$ts.pml"& $pm /AcceptEula /Quiet /Minimized /LoadConfig $cfg /BackingFile $pmlStart-Sleep -Seconds 120& $pm /Terminate
}
适用:长时间追踪,但每片可控;崩溃/卡顿时更易定位时间段。
C. 离线转换(PML → CSV)
:: 把 a.pml 转成 a.csv,便于发给同事或导入 Excel/BI
procmon.exe /OpenLog D:\logs\a.pml /SaveAs D:\logs\a.csv
说明:
/SaveAs
会根据扩展名导出为 CSV/XML/PML。CSV 适合快速筛选、统计。
D. 一次到位:载入模板 + 写盘 + 立刻隐藏
procmon.exe ^/AcceptEula /Quiet /Minimized ^/LoadConfig "D:\pm\Base.pmc" ^/BackingFile "D:\pm\capture_%RANDOM%.pml"
直接把 GUI“点点点”的动作变成一条命令。
4)和“配置模板”配合的要点
-
模板里统一设置:
- 过滤器(只纳入目标进程/路径;排除浏览器缓存、杀软缓存、索引等噪点)
- 高亮(错误码、长耗时)
- 列视图(
Time of Day | Process Name | PID | Operation | Path | Result | Detail
) - 性能开关(长跑模板开启 Drop Filtered Events;定位模板可开 Call Stacks)
-
命令行只负责加载模板与落盘路径,思路更清晰。
5)权限、体积与稳定性
- 权限:普通账户也能抓到大多数事件,但要看核心驱动是否能加载。建议以管理员启动脚本,尤其是需要 Boot Logging、驱动层细节时。
- 体积:开启调用栈、关闭“Drop Filtered Events”都会显著增大 PML;长跑请使用“轮转切片”或在模板中启用丢弃策略。
- 并发实例:新开一个实例会与已有实例交互;
/Terminate
是发指令给已运行实例,而不是“强杀进程”,更安全。
6)常见组合与故障排查
- 命令跑了但文件很小/空
多半是模板里开启了 Drop Filtered Events,且你的过滤条件过严;或目标进程未在窗口内产生事件。放宽条件或延长采集时间。 - EULA 卡住无人值守
一定加/AcceptEula
,否则初次运行会弹窗阻塞。 - 导出 CSV 失败
确保已用/OpenLog
打开某个 PML,再/SaveAs
;路径需可写。 - 64 位系统
默认使用procmon.exe
即可;若目录中同时有Procmon64.exe
,保持一致路径调用,避免混淆。
7)团队落地清单
- 产出 Base.pmc / Longrun.pmc / DeepStack.pmc 三类模板
- 发布 “60 秒无人值守.cmd” 与 “轮转切片.ps1” 两个脚本
- 规范日志命名:
pm_{yyyyMMdd_HHmmss}.pml
- 在 README 里标注模板是否开启调用栈/是否丢弃过滤事件
- 服务器/办公机用计划任务调度(问题时刻快速复现)
结语
把 Procmon 命令行玩明白,你就能在最短窗口抓到最有价值的证据。
模板化 + 脚本化,是把“经验”转化为“能力”的关键一步。下一篇我们进入 5.10 分析工具:学会用内置统计与栈视图,快速缩小嫌疑面。