Windows 重装后 SID/所有权批量修复工具包
适用场景:重装系统后(即使还用同一个用户名),文件/文件夹属性里出现"未知账户", 或者旧硬盘(包括移动硬盘)上的文件提示"拒绝访问"。 原理:Windows 重装会生成新的机器 SID,旧文件的所有者和权限条目里记录的是旧 SID。
需要什么
- Windows 10/11,PowerShell 7 (pwsh)(没有的话管理员运行:
winget install Microsoft.PowerShell) - 管理员权限(运行时会弹 UAC,点"是")
- 要修复的硬盘全部接好
使用步骤
1. 修复(改所有权 + 替换所有旧 SID)
管理员 PowerShell 7 中运行:
pwsh -NoProfile -ExecutionPolicy Bypass -File fix_sids.ps1 -Roots "D:;E:;F:;G:;H:;I:"
-Roots换成你自己的盘符列表,分号分隔;不要包含系统盘 C:;不填则自动选择除 C: 外所有卷- 脚本会先做一次自检(在临时目录造测试数据验证修复逻辑),通过后才开始处理真实数据
- 每块盘的处理顺序:
takeown /r批量改所有者 → 逐个对象替换旧 SID(所有者/组/权限条目,含从父目录继承的) - 进度写入
%TEMP%\hermes_acl\fix_sids.log;跑完看日志末尾:err=0 fails=0即完美
2. 恢复盘符(可选,重装后 Windows 会重新分配盘符)
先确认重装前各盘是什么字母(旧笔记/习惯),再编辑 restore_letters.ps1 里的映射表,然后管理员运行:
pwsh -NoProfile -ExecutionPolicy Bypass -File restore_letters.ps1
3. 验证(确认"未知账户"清零)
pwsh -NoProfile -ExecutionPolicy Bypass -File acl_scan.ps1 -Roots "D:;E:;F:;G:;H:;I:;C:\Users"
结果文件在 %TEMP%\hermes_acl\acl_scan_result.txt:bad = 0 即全部修复。 (C:\Users\Public 下出现 S-1-5-3/S-1-5-4 是 Windows 系统默认 SID,属正常,不是问题。)
注意事项
- 修复期间不要关机、不要拔盘;被其它程序占用中的文件可能被跳过(日志里
SET_ERR),关掉程序后重跑一次即可 - 跳过
$RECYCLE.BIN、System Volume Information、Recovery(系统自己会重建,不用管) - 权限级别(完全控制/修改/只读等)原样保留,只是把旧身份换成新身份;不会破坏自定义权限
- 修复结果只对"这台机器"有效:把盘插到另一台电脑上,那台电脑仍会显示未知(NTFS 权限按机器记)。多机共用建议额外加
Authenticated Users权限 - 中途断掉也没关系:脚本幂等,重跑会继续处理剩下的
常见问题
| 现象 | 处理 |
|---|---|
日志 NOT_ELEVATED_ABORT |
没管理员权限,用管理员终端重跑 |
自检 SELFTEST_FAIL |
环境异常,先解决权限/磁盘问题,不要强行跳过 |
err 或 fails 不为 0 |
看日志对应行;多数是被占用文件,关程序重跑 |
| 没有 pwsh | winget install Microsoft.PowerShell 后重开终端 |
工具包下载
三个脚本(管理员 PowerShell 7 运行,均为明文、程序员友好):
- acl_scan.ps1 — 扫描验证(bad = 0 即修复完成)
- fix_sids.ps1 — 一键修复(自检 + takeown + SID 替换)
- restore_letters.ps1 — 恢复盘符映射
评论