realgeekyjeff/WindowsRecentFolderCleaner
GitHub: realgeekyjeff/WindowsRecentFolderCleaner
一个企业级安全的PowerShell脚本,自动监控并清理Windows Recent文件夹的快捷方式文件,在删除前提取详细元数据并备份,用于取证分析和系统维护。
Stars: 0 | Forks: 0
# Windows 最近文件夹清理器
一个安全的自动化 PowerShell 脚本,用于监控和清理 Windows Recent 文件夹,在备份和删除快捷方式(.lnk)文件之前记录详细的元数据。专为取证分析和系统维护而设计,具有企业级安全功能。
## 概述
Windows Recent Folder Cleaner 由两个主要组件组成:
### WindowsRecentFolderCleaner.ps1
核心 PowerShell 脚本,功能包括:
- 自动创建每 5 分钟运行一次的计划任务
- 扫描 Windows Recent 文件夹中的 .lnk 文件
- 从每个快捷方式中提取全面的元数据
- 将所有数据记录到安全的 JSON 数据库中
- 在删除前创建文件备份
- 实现多层安全保护,包括哈希验证和 ACL 限制
- 提供详细的控制台输出和通知
### WindowsRecentFolderCleaner.cmd
批处理文件包装器,功能包括:
- 绕过 PowerShell 执行策略限制
- 以提升的管理员权限启动脚本
- 确保脚本在受控环境中运行
## 功能
### 核心功能
- **自动监控**:通过 Windows 任务计划程序每 5 分钟运行一次
- **全面日志记录**:每个快捷方式文件捕获 25+ 个元数据字段
- **安全删除**:在永久删除前备份文件
- **JSON 数据库**:维护所有已处理文件的可搜索日志
- **错误处理**:强大的错误恢复和清理程序
### 安全功能
- **脚本完整性验证**:每次运行时进行 SHA256 哈希检查
- **访问控制**:将文件权限限制为仅当前用户
- **篡改检测**:检测未经授权的脚本修改并发出警报
- **路径验证**:防止符号链接和路径注入攻击
- **管理员强制执行**:需要提升的权限才能运行
### 元数据收集
对于每个 .lnk 文件,脚本会记录:
- 文件系统属性(大小、时间戳、所有者、哈希)
- 快捷方式属性(目标路径、参数、工作目录)
- 目标文件信息(如果可访问)
- 处理元数据(计算机名、用户名、时间戳)
- 备用数据流和安全属性
## 要求
### 系统要求
- Windows 10/11(推荐 64 位)
- PowerShell 5.1 或更高版本
- 管理员权限
- 至少 100MB 可用磁盘空间用于日志和备份
### 权限
- 本地管理员权限
- 对脚本目录的写入权限
- 访问 Windows 任务计划程序的权限
- 对 Windows Recent 文件夹的读写权限
## 安装
1. **下载文件**:将 `WindowsRecentFolderCleaner.ps1` 和 `WindowsRecentFolderCleaner.cmd` 放在同一目录中(例如 `C:\Tools\`)
2. **初始设置**:运行脚本一次以创建计划任务并初始化安全文件
3. **验证安装**:检查以下文件是否已创建:
- `WindowsRecentFolderCleaner.hash`(脚本完整性哈希)
- `WindowsRecentFolderCleaner.hash.meta`(元数据)
- `logs\` 目录
- 名为 "WindowsRecentFolderCleaner_Monitor" 的计划任务
## 使用方法
### 方法 1:使用包装器(推荐)
对于有执行策略限制的系统:
```
WindowsRecentFolderCleaner.cmd
```
此方法:
- 自动绕过执行策略
- 请求管理员权限
- 在安全环境中运行脚本
### 方法 2:手动 PowerShell 执行
如果您有执行策略权限:
```
# 以管理员身份打开 PowerShell,然后运行:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\WindowsRecentFolderCleaner.ps1
```
### 方法 3:直接执行(如果策略允许)
如果您的系统允许脚本执行:
```
# 以管理员运行:
.\WindowsRecentFolderCleaner.ps1
```
## 工作原理
### 首次运行流程
1. **权限检查**:验证管理员权限
2. **环境验证**:检查路径和系统兼容性
3. **哈希生成**:创建脚本的 SHA256 哈希以确保完整性
4. **任务创建**:注册每 5 分钟运行一次的计划任务
5. **安全设置**:对关键文件应用 ACL 限制
6. **初始扫描**:处理现有的 .lnk 文件
### 后续运行
1. **完整性验证**:将当前脚本哈希与存储的哈希进行比较
2. **任务验证**:确保计划任务存在且已启用
3. **文件发现**:扫描 Recent 文件夹中的新 .lnk 文件
4. **元数据提取**:使用 Windows Shell COM 对象解析每个快捷方式
5. **数据库更新**:将新记录追加到 JSON 日志
6. **备份创建**:将文件复制到备份目录
7. **安全删除**:永久删除原始文件
8. **清理**:验证所有操作并报告状态
### 计划任务详情
- **名称**:WindowsRecentFolderCleaner_Monitor
- **频率**:每 5 分钟
- **操作**:使用 RemoteSigned 执行策略运行 PowerShell
- **主体**:具有最高权限的当前用户
- **设置**:在电池上运行,电池上不停止,可用时启动
## 文件结构
安装后,将创建以下文件:
```
C:\Tools\
├── WindowsRecentFolderCleaner.ps1 # Main script
├── WindowsRecentFolderCleaner.cmd # Wrapper launcher
├── WindowsRecentFolderCleaner.hash # Script integrity hash
├── WindowsRecentFolderCleaner.hash.meta # Hash metadata (JSON)
├── logs\
│ ├── WindowsRecentFolderCleaner.json # Main log database
│ ├── WindowsRecentFolderCleaner.json.hash # Log integrity hash
│ └── backups\ # Backup directory
│ ├── File1.lnk_20231201_143022.bak
│ └── File2.lnk_20231201_143023.bak
└── README.md # This documentation
```
### 日志轮转
- JSON 日志超过 100MB 时进行轮转
- 旧日志带有时间戳并被存档
- 备份无限期保留(需要手动清理)
## 安全功能
### 脚本完整性
- 每次执行时进行 SHA256 哈希验证
- 篡改检测并发出警报通知
- 受限的文件权限(仅所有者访问)
### 数据保护
- 原子文件操作以防止损坏
- 删除前备份策略
- JSON 完整性验证
- 路径长度验证(260 字符限制)
### 访问控制
- 管理员权限强制执行
- 对敏感文件的 ACL 限制
- 基于用户 SID 的权限管理
## 故障排除
### 常见问题
#### "在此系统上禁用运行脚本"
**解决方案**:使用 `WindowsRecentFolderCleaner.cmd` 而不是直接运行 .ps1。
#### "此脚本需要管理员权限"
**解决方案**:右键单击启动器并选择"以管理员身份运行",或使用请求提升的包装器。
#### "计划任务创建失败"
**原因**:权限不足或组策略限制。
**解决方案**:
- 确保以管理员身份运行
- 检查组策略中的任务计划程序限制
- 如需要可手动创建任务
#### "脚本完整性检查失败"
**原因**:脚本文件已被修改。
**解决方案**:
- 验证脚本未被篡改
- 删除 `.hash` 和 `.hash.meta` 文件以重置(下次运行时会重新创建)
- 如怀疑被篡改请联系管理员
#### "JSON 文件完整性检查失败"
**原因**:日志文件损坏。
**解决方案**:
- 检查磁盘空间和文件系统健康状况
- 如有备份则从备份恢复
- 删除损坏的 JSON 文件(将重新开始)
### 错误代码
- **退出代码 0**:成功
- **退出代码 1**:严重错误(检查日志)
### 日志和调试
- 所有操作都记录到控制台并带有颜色编码输出
- JSON 数据库包含详细的处理信息
- 备份文件保留原始快捷方式以供分析
## 卸载
1. **停止计划任务**:
Unregister-ScheduledTask -TaskName "WindowsRecentFolderCleaner_Monitor" -Confirm:$false
2. **删除文件**:
Remove-Item -Path "C:\Tools\WindowsRecentFolderCleaner.*" -Force
Remove-Item -Path "C:\Tools\logs" -Recurse -Force
3. **清理注册表**(如需要):
- 此脚本不创建任何注册表条目
## 高级配置
### 修改计划
要更改运行频率(默认:5 分钟):
1. 打开任务计划程序
2. 找到 "WindowsRecentFolderCleaner_Monitor"
3. 修改触发器设置
### 自定义日志位置
脚本使用相对路径。要更改位置,请修改脚本中的以下变量:
- `$LogsDirectory`
- `$BackupDirectory`
### 备份保留
当前,备份无限期保留。如需要可添加清理逻辑。
## 支持和贡献
### 报告问题
报告问题时,请包括:
- 完整错误信息
- PowerShell 版本(`$PSVersionTable`)
- Windows 版本
- `logs\WindowsRecentFolderCleaner.json` 的内容(最后几条记录)
### 安全注意事项
- 此脚本需要管理员权限
- 它会永久删除 Recent 文件夹中的文件
- 在生产系统上运行前务必检查代码
- 首先在虚拟环境中测试
## 许可证
此脚本按原样提供,仅用于教育和维护目的。使用风险自担。
MIT 许可证
标签:ACL权限控制, AI合规, ETW劫持, Homebrew安装, HTTP工具, IPv6, JSON数据库, Libemu, lnk文件, PowerShell, Recent文件夹, SHA256, Windows Defender, 任务计划, 企业安全, 哈希验证, 备份恢复, 安全脚本, 恶意软件清理, 文件元数据, 无线安全, 日志记录, 权限管理, 模型越狱, 管理员权限, 篡改检测, 系统维护, 终端安全, 网络调试, 网络资产管理, 脚本完整性, 自动化