You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何捕获EXE程序在PowerShell中执行的所有命令?

如何捕获EXE程序在PowerShell中执行的所有命令?

嘿,我完全懂你的困扰——用(Get-PSReadlineOption).HistorySavePath只能查到自己手动敲的命令,那个EXE偷偷运行的指令根本看不到,对吧?别着急,下面给你几个实用的方法,亲测能解决这个问题:

  • 方法一:用Process Monitor(ProcMon)监控进程启动
    这是微软官方的免费工具,专门用来追踪系统里所有进程的活动,能精准抓到EXE启动的cmd/PowerShell命令:

    1. 打开ProcMon(解压即可使用,无需安装),点击工具栏的「Filter」按钮设置过滤规则:
      • 新增规则:Process Nameis → 输入你的EXE文件名(比如test.exe),点击「Add」
      • 再新增规则:OperationisCreateProcess,点击「Add」
    2. 点击「Apply」应用过滤,然后启动你的EXE程序
    3. 回到ProcMon,就能在「Detail」列里看到EXE启动的所有子进程的完整命令行参数,也就是它执行的那些命令啦
  • 方法二:启用PowerShell的全局日志记录
    通过系统组策略开启PowerShell的日志功能,就能记录所有PowerShell的执行活动,不管是你手动敲的还是EXE后台运行的:

    1. 按Win+R输入gpedit.msc打开组策略编辑器,导航到:
      计算机配置管理模板Windows组件Windows PowerShell
    2. 找到「启用模块日志」和「启用脚本块日志」,都设置为「已启用」
    3. 重启系统或PowerShell后,打开事件查看器,导航到:
      应用程序和服务日志MicrosoftWindowsPowerShellOperational
    4. 查找事件ID为4104的日志条目,里面的ScriptBlockText字段就是执行的命令内容
  • 方法三:用Start-Transcript记录当前会话(仅限特定场景)
    如果那个EXE是在你当前的PowerShell会话里执行命令(不是启动独立进程),可以提前开启会话录制:

    1. 在PowerShell里运行:Start-Transcript -Path "C:\temp\exe_commands.log"(路径可以自己改,确保有写入权限)
    2. 启动你的EXE程序,让它执行命令
    3. 执行完后运行:Stop-Transcript
    4. 打开生成的日志文件,就能看到会话里的所有活动记录,包括EXE执行的命令

顺便说下为啥你之前的方法没用:(Get-PSReadlineOption).HistorySavePath记录的只是当前用户手动在PowerShell中输入的命令历史,而EXE执行的命令要么是启动了独立的PowerShell/cmd进程,要么是在后台静默执行,这些都不会被这个历史文件捕获,所以你看不到。

备注:内容来源于stack exchange,提问作者Sycho AN

火山引擎 最新活动