命令行历史与输入痕迹
命令行历史在 Windows 上并不集中在一处:cmd 本身不写历史文件,只在当前会话内支持上下键翻阅;PowerShell 5 以后由 PSReadLine 把交互输入写入用户目录的文本文件;而“运行”对话框里输入过的内容记录在注册表的 RunMRU 键。两类痕迹能还原被手工执行过的单行命令,以及打开或执行过哪些路径。
基本信息
| cmd 历史 | 不持久化,仅会话内可用,重启或关闭窗口即丢失 |
|---|---|
| PowerShell 历史 | %APPDATA%\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt |
| 运行对话框 | HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU |
| 顺序字段 | MRUList 的字母排列表示最近使用的先后次序 |
| 相关痕迹 | RecentDocs、跳转列表、终端会话录制 |
典型使用场景
- 还原操作者在运行对话框里手工执行过的单行命令与程序名
- 判断某个可执行文件是被人工启动,还是由服务或计划任务拉起
- 取回已被删除工具的历史路径,作为后续文件检索的关键词
- 核对当事人口述的操作过程与主机上留下的输入痕迹是否一致
- 与会话录制、事件日志交叉验证,确认命令执行的先后顺序
历史痕迹查看
历史痕迹查看
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU" # 运行对话框输入
Get-Content "$env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt" -Tail 30
ls "$env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine" # 确认历史文件是否存在或被清空
# 多用户主机逐个用户目录取一次,避免只看到当前账号
# 文件不存在时改查会话录制与相关事件日志痕迹对照
| 痕迹 | 位置 | 能回答的问题 |
|---|---|---|
| RunMRU | HKCU 下 Explorer\RunMRU 键 | 运行对话框里输入过哪些内容 |
| PSReadLine 历史 | 用户目录下 PSReadLine 文本文件 | 交互执行过哪些 PowerShell 命令 |
| cmd 会话 | 无持久化文件 | 只能靠会话录制或进程证据还原 |
| RecentDocs 与跳转列表 | HKCU 下 Explorer 相关键、用户目录 | 访问过哪些文档与文件路径 |
RunMRU 的键值是展示用字符串,含转义与显示层的改写,个别字符与原始输入并不完全一致;解读时按原样记录,再人工还原成可能的命令,不要直接当作可执行命令写入结论。
PSReadLine 历史默认只保存命令文本、没有时间戳,单靠它无法确定执行时刻;要落到时间线必须借助文件修改时间、事件日志或终端会话录制,相互印证后再取值。