ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Windows使用记录全解析:不装第三方工具,还原开机、登录与文件访问痕迹

Windows使用记录全解析:不装第三方工具,还原开机、登录与文件访问痕迹 简介这份文档面向需要了解电脑使用痕迹的普通用户与初级运维人员系统梳理了查看电脑使用记录的多种实用方法涵盖开机记录、文档操作记录与上网记录三大方向帮助读者掌握排查电脑使用情况的基本技能。资源包内含1个doc文件大小约30KB以图文步骤形式组织内容便于按需检索与对照操作。文档从计划任务日志、事件查看器、systeminfo命令等角度讲解开机时间查询并借助Prefetch目录、Recent文件夹、History记录等路径还原程序运行与文件打开历史同时说明如何通过Temporary Internet Files与IE历史记录追溯上网痕迹。目前已有6304人学习下载适合希望快速上手电脑使用记录查询、日常维护个人电脑或进行基础取证学习的读者参考。1. 查看电脑使用记录从开机时间到最近打开的文件一次讲透很多人第一次被问到“这台电脑最近谁用过、都干了什么”时脑子里第一反应是翻聊天记录或者浏览器历史结果发现根本对不上号。其实 Windows 自己就留了一整套使用痕迹只是分散在事件日志、注册表、Prefetch、最近访问列表这些角落里平时没人注意。我见过太多人为了查一台公用机的使用情况装了一堆来路不明的“监控软件”最后要么被杀毒干掉要么自己先中招。这篇要聊的就是不装任何第三方工具纯靠系统自带能力把使用记录翻出来——开机、关机、登录、程序启动、文件打开、U 盘插拔基本都能还原。适合运维、行政、家长以及任何需要确认“这台机器到底被怎么用过”的人。下面按“先看什么、怎么导出、坑在哪”的顺序走一遍。2. 事件查看器系统日志里到底藏着哪些使用痕迹2.1 先搞清楚三个关键日志通道Windows 的事件日志不是一锅粥使用记录主要落在三个地方。第一个是Windows 日志 → 系统这里记录开关机、服务启停、驱动加载事件 ID 6005 表示事件日志服务启动约等于开机6006 表示停止约等于关机6008 是异常关机。第二个是Windows 日志 → 安全登录成功是 4624登录失败是 4625注销是 4634这个通道默认可能没开审核后面会讲怎么开。第三个是应用程序和服务日志 → Microsoft → Windows下面的一堆子项比如TaskScheduler记录计划任务Windows Defender记录扫描动作DriverFrameworks记录设备驱动。打开方式很简单WinR 输入eventvwr.msc回车或者右键“此电脑”→“管理”→“事件查看器”。左侧树形结构展开就能看到上面说的通道。我一般先看“系统”通道因为开关机记录最直接不需要额外配置。2.2 用筛选器把开关机记录捞出来直接翻几千条日志不现实得用“筛选当前日志”。在“系统”通道上右键→“筛选当前日志”在“包括/排除事件 ID”里填6005,6006,6008确定后列表就只剩开关机相关。6005 的时间戳就是系统启动完成的时刻6006 是正常关机开始6008 是上次没正常关机。如果想批量导出成表格可以用 PowerShell 的Get-WinEvent# 导出最近 30 天的开关机记录到 CSV $start (Get-Date).AddDays(-30) Get-WinEvent -FilterHashtable { LogName System Id 6005,6006,6008 StartTime $start } | Select-Object TimeCreated, Id, {Name事件;Expression{ switch ($_.Id) { 6005 {开机} 6006 {关机} 6008 {异常关机} } }} | Export-Csv -Path $env:USERPROFILE\Desktop\开关机记录.csv -Encoding UTF8 -NoTypeInformation这段脚本的逻辑是先算 30 天前的时间点然后用FilterHashtable在系统日志里按事件 ID 和时间范围过滤最后把结果映射成中文事件名导出 CSV。-Encoding UTF8是为了 Excel 打开不乱码-NoTypeInformation去掉多余的#TYPE行。参数上StartTime可以改成任意天数Id数组里加1074还能看到是谁发起的关机比如某个程序或用户。2.3 登录审核默认是关的得先打开安全日志里的 4624/4625 默认可能一条都没有因为 Windows 默认不审核登录事件。要打开的话WinR 输入secpol.msc家庭版没有这个得用gpedit.msc或注册表进“本地策略”→“审核策略”→“审核登录事件”勾选“成功”和“失败”。改完之后需要重启或者gpupdate /force生效。打开之后安全日志里就会出现 4624登录成功和 4625登录失败。4624 里重点看几个字段登录类型2 是本地交互登录3 是网络登录10 是远程桌面、账户名、源网络地址。如果是查“谁在什么时候坐在这台机器前”就看类型 2 的记录。# 导出最近 7 天的登录成功记录 Get-WinEvent -FilterHashtable { LogName Security Id 4624 StartTime (Get-Date).AddDays(-7) } | Where-Object { $_.Properties[8].Value -eq 2 } | # 只看本地交互登录 Select-Object TimeCreated, {Name用户;Expression{$_.Properties[5].Value}}, {Name登录类型;Expression{$_.Properties[8].Value}} | Export-Csv $env:USERPROFILE\Desktop\登录记录.csv -Encoding UTF8 -NoTypeInformation这里Properties[5]是目标用户名Properties[8]是登录类型。注意不同系统版本属性索引可能略有差异如果导出来是空的先把一条 4624 的Properties全部打印出来对一下位置。3. 最近访问与程序痕迹Prefetch、Recent 和跳转列表3.1 Prefetch 文件夹程序启动的“黑匣子”C:\Windows\Prefetch这个目录里存着每个运行过的程序的.pf文件文件名格式是程序名哈希.pf。每次程序启动系统都会更新对应的 pf 文件所以看文件的修改时间就能知道某个程序最后一次运行是什么时候。这个目录默认需要管理员权限才能读。# 列出 Prefetch 里最近 30 天有更新的程序 Get-ChildItem C:\Windows\Prefetch\*.pf -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-30) } | Sort-Object LastWriteTime -Descending | Select-Object Name, LastWriteTime | Export-Csv $env:USERPROFILE\Desktop\Prefetch记录.csv -Encoding UTF8 -NoTypeInformation-ErrorAction SilentlyContinue是为了跳过没权限的文件。导出的LastWriteTime就是该程序最后一次启动的时间。注意 Prefetch 只记录可执行文件的启动不记录具体打开了哪个文档而且 Windows Server 默认关闭 PrefetchSSD 上有些系统也会禁用所以如果目录是空的先确认EnablePrefetcher注册表值是不是 0。3.2 Recent 文件夹最近打开过哪些文档%APPDATA%\Microsoft\Windows\Recent里存的是快捷方式每个快捷方式对应一个最近打开过的文件。看修改时间就知道什么时候打开的。这个比 Prefetch 更贴近“使用记录”因为它直接反映文档级别的操作。# 列出最近打开过的文档按时间倒序 Get-ChildItem $env:APPDATA\Microsoft\Windows\Recent\* -Include *.lnk | Sort-Object LastWriteTime -Descending | Select-Object Name, LastWriteTime | Format-Table -AutoSize-Include *.lnk只挑快捷方式避免把文件夹也列进来。Name就是原文件名加.lnk去掉后缀就是文档名。如果 Recent 是空的可能是被清理工具清过或者组策略里禁用了“最近使用的项目”。3.3 跳转列表任务栏右键里的“最近”Windows 7 以后任务栏图标右键会显示“最近打开的文件”这些数据存在%APPDATA%\Microsoft\Windows\Recent\AutomaticDestinations和CustomDestinations里。文件名是一串哈希对应不同的应用。用工具JLECmd可以解析但纯手工的话看文件的修改时间也能大致判断哪个应用最近活跃。# 查看跳转列表文件的修改时间 Get-ChildItem $env:APPDATA\Microsoft\Windows\Recent\AutomaticDestinations\* | Sort-Object LastWriteTime -Descending | Select-Object -First 20 Name, LastWriteTime-First 20只取最近 20 个避免刷屏。这些哈希文件名需要对照表才能知道是哪个程序常见做法是配合JLECmd导出 CSV 再看但那个工具不在系统自带范围里这里只做时间线参考。4. 避坑与排查查使用记录时最容易翻车的五个点4.1 安全日志是空的一条 4624 都没有现象打开事件查看器的安全日志发现只有零星几条根本没有登录记录。原因Windows 默认审核策略不记录登录成功事件家庭版还没有secpol.msc。解决用gpedit.msc进“计算机配置”→“Windows 设置”→“安全设置”→“本地策略”→“审核策略”把“审核登录事件”的成功和失败都勾上。家庭版可以用auditpol /set /subcategory:登录 /success:enable /failure:enable命令直接开。改完gpupdate /force然后注销再登录一次才会产生记录。4.2 Prefetch 目录是空的或者只有几个文件现象C:\Windows\Prefetch里没几个 pf 文件或者干脆打不开。原因三种可能——不是管理员权限、系统装在 SSD 上且禁用了 Prefetch、或者是 Windows Server 系统。解决先用管理员身份运行 PowerShell。然后查注册表HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters下的EnablePrefetcher值为 0 表示禁用改成 3 再重启。如果是 Server 系统Prefetch 默认关闭这个没办法只能靠 Recent 和事件日志补。4.3 导出的 CSV 用 Excel 打开全是乱码现象PowerShell 导出的 CSV 双击打开中文变成问号或方块。原因PowerShell 默认导出编码是 UTF-16 或者系统 ANSIExcel 对 UTF-8 无 BOM 的识别也不稳定。解决导出时加-Encoding UTF8如果还是乱码用 Excel 的“数据”→“从文本/CSV”手动选 UTF-8 导入。或者干脆导出成|分隔的 txt再用 Excel 分列。4.4 登录记录里一堆类型 3 和类型 5分不清谁是谁现象4624 里大量登录类型 3网络和类型 5服务根本看不出真人登录。原因系统服务、网络共享、计划任务都会产生登录事件这些不是真人操作。解决筛选时只保留类型 2本地交互和类型 10远程桌面。类型 2 是坐在机器前登录类型 10 是远程桌面连进来。类型 3 和 5 直接过滤掉否则日志量会大到没法看。4.5 Recent 文件夹被清空了还有没有救现象%APPDATA%\Microsoft\Windows\Recent里空空如也。原因被清理工具如 CCleaner清过或者组策略里设置了“不保留最近打开的文档历史”。解决先查组策略用户配置→管理模板→开始菜单和任务栏→不保留最近打开的文档历史如果启用了就禁用掉。已经被清掉的文件名很难恢复但可以退而求其次看 Prefetch 和事件日志里的程序启动记录至少能还原“用过哪些程序”。如果连 Prefetch 都被清了那就只能看系统日志的开关机时间线了。5. 进阶技巧把零散记录拼成一条完整时间线前面几章分别讲了事件日志、Prefetch、Recent 三个来源但单独看任何一个都只是碎片。真正有用的是把它们按时间轴合并还原出“几点开机、几点登录、打开了哪些程序、看了哪些文档、几点关机”这样一条完整链路。我一般会写一个 PowerShell 脚本把三个来源的数据统一成时间, 来源, 事件三列然后按时间排序导出。# 合并开关机、登录、Prefetch、Recent 到一条时间线 $timeline () # 1. 开关机 $timeline Get-WinEvent -FilterHashtable {LogNameSystem; Id6005,6006} -MaxEvents 50 | ForEach-Object { [PSCustomObject]{ 时间 $_.TimeCreated 来源 系统 事件 if ($_.Id -eq 6005) {开机} else {关机} } } # 2. 登录成功类型 2 $timeline Get-WinEvent -FilterHashtable {LogNameSecurity; Id4624} -MaxEvents 50 -ErrorAction SilentlyContinue | Where-Object { $_.Properties[8].Value -eq 2 } | ForEach-Object { [PSCustomObject]{ 时间 $_.TimeCreated 来源 安全 事件 登录: $($_.Properties[5].Value) } } # 3. Prefetch 程序启动 $timeline Get-ChildItem C:\Windows\Prefetch\*.pf -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-7) } | ForEach-Object { [PSCustomObject]{ 时间 $_.LastWriteTime 来源 Prefetch 事件 运行: $($_.Name -replace \.pf$,) } } # 4. Recent 文档打开 $timeline Get-ChildItem $env:APPDATA\Microsoft\Windows\Recent\*.lnk -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-7) } | ForEach-Object { [PSCustomObject]{ 时间 $_.LastWriteTime 来源 Recent 事件 打开: $($_.Name -replace \.lnk$,) } } # 按时间排序并导出 $timeline | Sort-Object 时间 | Export-Csv $env:USERPROFILE\Desktop\使用时间线.csv -Encoding UTF8 -NoTypeInformation Write-Host 已导出到桌面使用时间线.csv共 $($timeline.Count) 条记录这段脚本的关键在于[PSCustomObject]把不同来源的数据统一成相同结构然后Sort-Object 时间做全局排序。-MaxEvents 50限制每个来源最多取 50 条避免数据量太大跑得慢实际用的时候可以调大。-ErrorAction SilentlyContinue是防止安全日志没开审核时脚本直接报错中断。几个参数上的取舍时间范围我一般用 7 天太长的话 Prefetch 和 Recent 的文件修改时间会混入很多无关更新如果只想看某一天可以在Where-Object里加$_.LastWriteTime.Date -eq 2025-01-15这样的条件。另外Properties[5]和Properties[8]的索引在不同 Windows 版本上可能有偏移第一次跑之前先单独打一条 4624 的Properties出来核对。还有一个容易被忽略的点如果机器开了“快速启动”6005 事件可能不会每次开机都产生因为快速启动本质是休眠恢复。这时候要看 6005 和 6006 之间的配对或者改用Kernel-Boot事件 ID 27 来判断真正的启动。我一般会在脚本里同时抓 6005 和 27两个都有就以 27 为准。从那以后我每次查使用记录都强制先跑一遍这个合并脚本而不是东翻西翻。因为单独看任何一个来源都容易漏掉关键时间点只有拼成一条线才能一眼看出“这台机器在某个时间段到底经历了什么”。希望帮到你。本文还有配套的精品资源点击获取
返回列表