Windows Server 2016递归授予域用户/组文件夹权限问题排查
解决Windows Server 2016中文件夹权限添加后无权限的问题
我懂你遇到的麻烦了——明明代码显示域组已经加到权限列表里,但就是没给上完全控制权限对吧?问题出在你创建FileSystemAccessRule的时候,漏掉了关键的继承和传播参数,默认的简化构造函数没法让权限正确生效。
你原来的代码只用了三个参数来创建权限规则,但系统需要知道这个权限要不要传递给子文件夹、文件,以及传播的范围,缺了这些参数的话,权限只会空有一个用户条目,实际生效的权限根本没配上。
修正后的完整代码
# 完整指定继承与传播逻辑的权限规则 $rule = New-Object System.Security.AccessControl.FileSystemAccessRule( "domain\group", "FullControl", "ContainerInherit,ObjectInherit", # 权限同时继承到子文件夹和文件 "None", # 不限制权限的传播范围 "Allow" ) foreach ($file in $(Get-ChildItem "G:\usr" -Recurse)) { $acl = Get-Acl $file.FullName $acl.SetAccessRule($rule) Set-Acl $File.Fullname $acl }
额外效率优化建议
如果你的目标是给G:\usr根目录以及所有子项统一设置权限,其实不用递归遍历每个对象——直接给根目录设置可继承权限,子文件夹和文件会自动继承这个权限,效率更高:
$rootPath = "G:\usr" $acl = Get-Acl $rootPath $rule = New-Object System.Security.AccessControl.FileSystemAccessRule( "domain\group", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow" ) $acl.SetAccessRule($rule) Set-Acl $rootPath $acl
原代码失效的核心原因
当你使用仅含3个参数的FileSystemAccessRule构造函数时,它默认的继承标志是None、传播标志也是None——这意味着权限只绑定在当前对象本身(比如单个文件夹),既不会传递给子项,也不会被系统识别为有效的可生效权限,最终就出现了"用户在列表里但没权限"的奇怪现象。
内容的提问来源于stack exchange,提问作者hans
相关产品推荐
相关产品推荐

