如何捕获EXE程序在PowerShell中执行的所有命令?
如何捕获EXE程序在PowerShell中执行的所有命令?
嘿,我完全懂你的困扰——用(Get-PSReadlineOption).HistorySavePath只能查到自己手动敲的命令,那个EXE偷偷运行的指令根本看不到,对吧?别着急,下面给你几个实用的方法,亲测能解决这个问题:
方法一:用Process Monitor(ProcMon)监控进程启动
这是微软官方的免费工具,专门用来追踪系统里所有进程的活动,能精准抓到EXE启动的cmd/PowerShell命令:- 打开ProcMon(解压即可使用,无需安装),点击工具栏的「Filter」按钮设置过滤规则:
- 新增规则:
Process Name→is→ 输入你的EXE文件名(比如test.exe),点击「Add」 - 再新增规则:
Operation→is→CreateProcess,点击「Add」
- 新增规则:
- 点击「Apply」应用过滤,然后启动你的EXE程序
- 回到ProcMon,就能在「Detail」列里看到EXE启动的所有子进程的完整命令行参数,也就是它执行的那些命令啦
- 打开ProcMon(解压即可使用,无需安装),点击工具栏的「Filter」按钮设置过滤规则:
方法二:启用PowerShell的全局日志记录
通过系统组策略开启PowerShell的日志功能,就能记录所有PowerShell的执行活动,不管是你手动敲的还是EXE后台运行的:- 按Win+R输入
gpedit.msc打开组策略编辑器,导航到:计算机配置→管理模板→Windows组件→Windows PowerShell - 找到「启用模块日志」和「启用脚本块日志」,都设置为「已启用」
- 重启系统或PowerShell后,打开事件查看器,导航到:
应用程序和服务日志→Microsoft→Windows→PowerShell→Operational - 查找事件ID为4104的日志条目,里面的
ScriptBlockText字段就是执行的命令内容
- 按Win+R输入
方法三:用
Start-Transcript记录当前会话(仅限特定场景)
如果那个EXE是在你当前的PowerShell会话里执行命令(不是启动独立进程),可以提前开启会话录制:- 在PowerShell里运行:
Start-Transcript -Path "C:\temp\exe_commands.log"(路径可以自己改,确保有写入权限) - 启动你的EXE程序,让它执行命令
- 执行完后运行:
Stop-Transcript - 打开生成的日志文件,就能看到会话里的所有活动记录,包括EXE执行的命令
- 在PowerShell里运行:
顺便说下为啥你之前的方法没用:(Get-PSReadlineOption).HistorySavePath记录的只是当前用户手动在PowerShell中输入的命令历史,而EXE执行的命令要么是启动了独立的PowerShell/cmd进程,要么是在后台静默执行,这些都不会被这个历史文件捕获,所以你看不到。
备注:内容来源于stack exchange,提问作者Sycho AN




