powershell 是修改 ntfs 文件夹权限最精准的方式,支持 acl 读取、构造与写入,可禁用继承、清除旧权限,并递归同步到子项,确保精细控制。
powershell 是修改 ntfs 文件夹安全权限最精准、可复用性最强的方式,尤其适合批量操作、脚本化部署或需要精细控制继承行为的场景。它能直接读取、构造和写入 acl(访问控制列表),避免图形界面中容易遗漏的继承、传播标志等问题。
先获取并检查当前权限
执行以下命令查看目标文件夹现有 ACL:
Get-Acl "D:\MyFolder" | Format-List
这会显示所有显式设置的 ACE(访问控制项),包括用户/组、权限类型(Allow/Deny)、访问权利及继承标志。若输出为空或报错“拒绝访问”,说明你没有读取该 ACL 的权限,需先获取所有权。
构造并应用纯净只读权限
例如,让用户 John 对文件夹仅能打开查看、不能新建/修改/删除:
- 先创建权限规则: $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("John", "ReadAndExecute", "ContainerInherit,ObjectInherit", "None", "Allow")
- 获取当前 ACL 并清空旧规则(可选,确保干净): $acl = Get-Acl "D:\MyFolder"; $acl.SetAccessRule($rule)
- 写入新权限: Set-Acl "D:\MyFolder" $acl
关键点:“ReadAndExecute”已隐含“列出文件夹内容”和“读取”,但不包含任何写入、删除或修改能力;“ContainerInherit,ObjectInherit”确保该规则同时应用于子文件夹和文件。
禁用继承并清除旧权限
若父目录权限宽松(如 Users 组有“修改”权),必须切断继承链才能保证本地设置生效:
- 禁用继承并移除所有已继承项: icacls "D:\MyFolder" /inheritance:r /t /c
- 再用 PowerShell 添加新规则(上一步的 $rule),避免残留干扰
注意:/inheritance:r 是彻底清除继承权限,不可逆;/t 表示递归处理子项,/c 忽略访问被拒的子项,防止中断。
递归同步到全部子项
新规则默认只作用于当前文件夹。要让所有子文件夹和文件都严格遵循同一策略:
- 逐项重设 ACL(推荐): Get-ChildItem "D:\MyFolder" -Recurse | ForEach-Object { Set-Acl $_.FullName $acl }
- 或更高效地先启用继承再刷新: icacls "D:\MyFolder" /inheritance:e /t; Get-ChildItem "D:\MyFolder" -Recurse | ForEach-Object { Set-Acl $_.FullName (Get-Acl "D:\MyFolder") }
后者适用于已有结构稳定、只需统一策略的场景;前者更适合权限已混乱、需强制覆盖的情况。











