【发布时间】:2017-11-27 23:20:47
【问题描述】:
我刚开始学习 PowerShell,我一直在尝试使用 .FileSystemAccessRule、.AddAccessRule(rule) 和最后的 Set-ACL 向文件夹添加安全组。
我可以遍历 acl 对象并发现它们确实与我通过文件夹->属性->安全选项卡看到的现有(安全)项目匹配。
作为我脚本的一部分,如果安全组已被分配,我会确保将其删除(这是为了确保保持适当的安全性和继承性)。一切正常。
这是我遇到困难的地方 - 将两个组分配给文件夹(一个“所有者”组和一个“只读”组)。我的目标是保留所有现有的权限分配并添加这三个新的组及其相关权限。正在发生的情况是,在最终的“Set-Acl”执行后,所有现有组都不再存在。因为还没有人分配给所有者组,所以无法执行进一步的任务(因为我已经失去访问权限,因为我所属的组不再被列为具有访问权限)。
------------------- 我的代码 ---------- -----------------------
#add the 2 groups to the folder
$acl = Get-Acl $folderPath
$acl.SetAccessRuleProtection($True, $False)
#add security group for Owners of this folder and all children
$ruleOwner = New-Object System.Security.AccessControl.FileSystemAccessRule("$domain\$grpOwner","Modify", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($ruleOwner)
#add security group for Read-Only of this folder and all children
$ruleReadOnly = New-Object System.Security.AccessControl.FileSystemAccessRule("$domain\$grpReadOnly","ReadAndExecute", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($ruleReadOnly)
Set-Acl $folderPath $acl
这是否应该删除现有的 acl 设置并使用新版本(尚未添加现有组/用户)更新文件夹?我阅读 .AddAccessRule 如何工作的方式是,它确实是附加的,应该单独留下其他现有的组。我确实验证了 $acl 是否存在所有组(在执行 Set-Acl cmdlet 之前在中断模式期间使用不同的窗口)。
感谢您的任何想法,不胜感激。
【问题讨论】:
-
因为我玩的越来越多了。看来我可能对以下行有疑问:$acl.SetAccessRuleProtection($True, $False) 当我在新窗口(脚本)中测试代码时,如果我没有指定 .SetAccessRuleProtection,则代码有效。我现在遇到的唯一问题是文件管理器和文件夹的 GUI 中没有出现“友好名称”。我得到了一个看起来很关键的描述,但权利是正确的。这些组存在于 AD 中,我已经验证了这一点,并且似乎具有正确的配置。我认为这条线需要做一些事情,更多的研究。
-
好的,在这里找到 .SetAccessRuleProtection 的示例:link "这里是使用该方法删除继承并删除现有访问规则的示例。$acl.SetAccessRuleProtection($true,$false )”——哎呀。似乎我告诉它删除所有继承的权利(那些是)。
标签: powershell