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, 任务计划, 企业安全, 哈希验证, 备份恢复, 安全脚本, 恶意软件清理, 文件元数据, 无线安全, 日志记录, 权限管理, 模型越狱, 管理员权限, 篡改检测, 系统维护, 终端安全, 网络调试, 网络资产管理, 脚本完整性, 自动化