Windows 开机自启全景审计
适用场景
- 用户问"开机自启有哪些程序"、"哪些可以禁用"、"开机太慢怎么优化"、"启动项清理"
- 用户希望对开机启动链路做体检,按风险分级输出建议
核心原则
- 只扫描、不动手 —— 默认输出报告 + 待执行命令清单,等用户拍板
- 决策有依据 —— 每项标注"为什么可禁/为什么必保留",不靠经验蒙
- 死链识别 —— 注册表值乱码(GBK 错位)+ 文件不存在 = 100% 安全可禁
- 系统关键项铁律保留 —— Defender / SamSs / SecurityHealth / WSearch 等禁了会出事
四阶段扫描流程
阶段 1:注册表 Run 键(最高频)
扫描 3 个根键的真实字符串启动值:
HKCU:\Software\Microsoft\Windows\CurrentVersion\RunHKLM:\Software\Microsoft\Windows\CurrentVersion\RunHKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Run
必须过滤 PSObject 元数据(PSPath/PSDrive/PSParentPath/PSChildName/PSProvider 等),否则会输出 PSDrive=HKLM 之类的伪项。完整 meta 名单见 references/powershell-pitfalls.md。
值必须匹配 \.(exe|bat|cmd|vbs|js|lnk|hta|com) 才算真启动项。
阶段 2:启动文件夹
- 用户:
$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup - 系统:
$env:ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
扫描 .lnk 快捷方式。
阶段 3:Auto 启动的可执行服务
Get-WmiObject Win32_Service | Where-Object {$_.StartMode -eq 'Auto' -and $_.State -eq 'Running' -and $_.PathName -notmatch 'svchost'}
排除 svchost 派生服务(太多),只看独立可执行服务。
阶段 4:登录触发的计划任务
PowerShell 5.1 踩坑:Get-ScheduledTask 返回的 Triggers.Type 在 PS 5.1 上访问不到(空字符串),改走命令行:
schtasks /query /fo TABLE /v | grep "登录时"
命中"登录时"或"Logon"关键词的行展开看任务名 + 执行命令 + 状态。
输出格式
主表(按渠道分组)
| 渠道 | 项名 | 命令/路径 | 作用 | 风险等级 | 建议 |
决策分类汇总
- 🔴 强烈建议禁:无功能影响 / 死链 / 明显冗余
- 🟡 评估后禁:取决于用户习惯(同步工具、专属硬件服务、Adobe 套件等)
- 🟢 保留:系统关键 / 常用软件 / OEM 配置
待执行命令清单(默认不执行)
按用户选择的方案给出:
- 注册表:
Remove-ItemProperty -Path '...' -Name '...' - 服务:
Stop-Service -Name ... -Force; Set-Service -Name ... -StartupType Disabled - 服务(管理员通道):
sc.exe stop ...; sc.exe config ... start= disabled
执行前必须明确告知用户每个命令的影响,并要求二次确认。
风险分级判断框架
| 信号 | 风险等级 |
|---|---|
| 注册表值乱码 + 目标文件不存在 | 🟢 死链,零影响 |
| Auto 服务但不属于 svchost、且非微软/非主流硬件厂商 | 🟡 评估 |
| 显示名是 "Microsoft *" 但实际是 OEM/UWP 预装 | 🟡 评估 |
| Defender / SecurityHealth / SamSs / WSearch / ProvTool | 🔴 必保留 |
| 打印后台(Spooler)但用户无打印机 | 🟢 可禁 |
| 第三方同步/网盘(OneDrive/坚果云/百度网盘) | 🟡 评估(影响同步) |
| Adobe/Acrobat OOBE 启动器 | 🟢 可禁(不常用) |
| OEM 专属服务(华硕 ATK / 联想 Vantage / 戴尔 SupportAssist) | 🟡 评估 |
一次性脚本
scripts/audit_startup.ps1 提供一键扫描,自动完成 4 阶段 + 输出主表 + 决策建议。脚本含中文注释,必须保存为 UTF-8 with BOM(PowerShell 5.1 编码铁律)。
关联技能
edge-troubleshooter:浏览器卡顿/崩溃排查,同样针对单进程做深度归因