【发布时间】:2018-01-23 20:37:38
【问题描述】:
我有一个目录,我想递归地浏览它并设置所有文件夹的权限。所以操作顺序应该是:
- 从文件夹中删除所有 ACL
- 将 ACL 添加到文件夹
- 设置 ACL
我尝试了下面的代码,但我得到了错误
无法设置 ACL,因为它需要调用的方法 SetSecurityDescriptor 不存在。
foreach ($folder in Get-ChildItem -Path c:\perms -Recurse -Directory) {
$AccessRule = New-Object System.Security.Accesscontrol.FileSystemAccessRule ("user", "FullControl", "ContainerInherit,ObjectInherit", "InheritOnly", "Allow")
$acl = Get-Acl $folder
$acl.SetAcccessRule($AccessRule)
Set-Acl -Path $folder.FullName -AclObject $acl
}
我摆脱了错误消息,它添加了 ACL,但我想基本上从文件夹中删除所有 ACL 并添加新的。
我将脚本更新为如下所示:
$acl = Get-Acl -Path "c:\perms"
$acl.SetAccessRuleProtection($true,$false)
$acl.Access | ForEach-Object { $acl.RemoveAccessRule($_) | Out-Null }
$ace = New-Object System.Security.Accesscontrol.FileSystemAccessRule ("user", "FullControl", "ContainerInherit,ObjectInherit", "InheritOnly", "Allow")
$acl.AddAccessRule($ace)
Set-Acl -Path "c:\perms" -AclObject $acl
如果我想添加多个$ace,是否只是声明$ace2,$ace3,然后调用$acl.AddAccessRule($ace2),$acl.AddAccessRule($ace3)。
【问题讨论】:
-
如果我想添加多个
$ace,只是...请在发帖前自己测试类似的简单的东西.将此更新添加到您的问题所花费的时间可能比通过运行快速测试来验证它所花费的时间要长。我不会用勺子喂你解决方案。
标签: powershell powershell-3.0 acl