PowerShell移除文件夹特殊NTFS权限误删SYSTEM权限问题
问题原因分析
icacls $path /reset命令的默认行为就是删除目标对象所有手动配置的显式NTFS权限,仅保留从父目录继承来的权限。你提到的仅作用于当前文件夹的SYSTEM权限属于手动添加的显式权限,不属于继承权限范畴,执行该命令时自然会被直接清除。- 你的脚本存在时序逻辑错误:你在脚本最开始用
Get-Acl读取了文件夹的原始权限存入$acl变量,后续执行/reset和/inheritance:d(禁用权限继承)的操作是直接修改文件系统的权限状态,此时你再将最早保存的$acl回写到文件夹,会因为禁用继承后权限继承状态已经变化,导致权限条目匹配异常、丢失。
修复建议
- 如果你仅需要移除
BUILTIN\Users组的指定显式权限,不需要重置全局权限,可以直接删除icacls $path /reset /t /c /l /q和icacls $path /inheritance:d两行代码,直接操作最开始读取的$acl对象即可,不会影响其他账号的显式权限配置。 - 如果确实需要保留重置权限、禁用继承的逻辑,需要调整执行顺序:先执行
icacls的重置和禁用继承操作,再重新用Get-Acl读取当前最新的ACL对象,再执行后续的权限筛选、移除、回写操作,避免使用状态已经过期的旧ACL对象回写导致异常。
内容的提问来源于stack exchange,提问作者Empty Coder
相关产品推荐
相关产品推荐

