PowerShell 通过 Get-Acl + Export-Clixml 导出完整 NTFS 权限(含 SID、继承标志等),再用 Import-Clixml + Set-Acl 还原,需先对齐继承状态(如用 icacls /inheritance:e/d),支持递归应用与批量处理。PowerShell 本身不提供“备份权限”和“一键还原权限”的原生命令,但它能完整导出、保存、再应用 NTFS 权限配置——这相当于实现了可重复、可验证的权限备份与还原闭环。关键不是用某个叫 Backup-Acl 的 cmdlet(它并不存在),而是用 `Get-Acl` + 文件序列化 + `Set-Acl` 组合完成。
导出当前 NTFS 权限为可复用的备份文件
运行以下命令,将目标路径的完整 acl 导出为安全描述符字符串(含所有 ace 规则),保存为 .acl 文件:
Get-Acl "D:\Projects" | Export-Clixml "D:\Backups\Projects_Acl_20260729.acl"
该文件是二进制序列化结果,保留了用户/组 SID、访问类型(Allow/Deny)、权限位(Read, Write, FullControl 等)、继承标志(ContainerInherit/ObjectInherit)等全部细节,比文本导出更可靠。
还原权限前必须确认继承状态一致
还原权限 ≠ 直接 Set-Acl。若源路径曾禁用继承(AreAccessRulesProtected = True),而目标路径启用继承,直接还原会导致规则被覆盖或冲突。因此还原前需先对齐继承策略:
- 查看当前是否禁用继承:
(Get-Acl "D:\Projects").AreAccessRulesProtected—— 返回 True 表示已禁用 - 若需匹配备份时的状态,用
icacls "D:\Projects" /inheritance:d /T禁用继承并保留现有规则 - 若备份时是启用状态,则先运行
icacls "D:\Projects" /inheritance:e /T恢复继承
执行权限还原并验证效果
导入备份文件并写回 ACL:
$acl = Import-Clixml "D:\Backups\Projects_Acl_20260729.acl"<br>Set-Acl "D:\Projects" $acl
如需递归应用到所有子项(常见于完整还原场景),加一行:
Get-ChildItem "D:\Projects" -Recurse | ForEach-Object { Set-Acl $_.FullName $acl }
验证是否生效:右键文件夹 → “属性” → “安全”选项卡,或运行 Get-Acl "D:\Projects" | fl 对比关键 ACE 条目。
批量备份与还原多个路径的实用技巧
对多个共享文件夹做统一权限快照,可用数组+循环:
$paths = @("D:\Shares\HR", "D:\Shares\Finance", "D:\Shares\IT")<br>$date = Get-Date -Format "yyyyMMdd"<br>$paths | ForEach-Object {<br> $name = $_.Split('\')[-1]<br> Get-Acl $_ | Export-Clixml "D:\Backups\${name}_Acl_${date}.acl"<br>}
还原时也建议按相同顺序执行,避免因依赖关系(如父文件夹未还原导致子项继承异常)出错。











