我有一个目录,想要递归地设置所有文件夹的权限。所以操作顺序应该是:
- 删除文件夹上的所有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。
我更新了我的脚本,如下所示:
$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
,只是一个简单的问题吗?在发布问题之前,请先自行测试一些简单的内容。将此更新添加到您的问题可能比通过快速测试验证它所需的时间更长。我不会为您提供解决方案。 - Ansgar Wiechers