xai*_*oft 6 powershell acl powershell-3.0
我有一个目录,我想递归遍历该目录并为所有文件夹设置权限。所以操作顺序应该是:
我尝试了以下代码,但出现错误
无法设置 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
}
Run Code Online (Sandbox Code Playgroud)
我摆脱了错误消息,并添加了 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
Run Code Online (Sandbox Code Playgroud)
如果我想添加多个$ace,是否只是声明$ace2,$ace3然后调用$acl.AddAccessRule($ace2), 的问题$acl.AddAccessRule($ace3)。
使用SetAccessRuleProtection()禁用继承并除去继承ACE:
$acl.SetAccessRuleProtection($true, $false)
Run Code Online (Sandbox Code Playgroud)
使用RemoveAccessRule()删除现有的(非继承)的ACE:
$acl.Access | ForEach-Object { $acl.RemoveAccessRule($_) | Out-Null }
Run Code Online (Sandbox Code Playgroud)
使用AddAccessRule()添加新的ACE:
$ace = New-Object Security.AccessControl.FileSystemAccessRule "user", ...
$acl.AddAccessRule($ace)
...
Run Code Online (Sandbox Code Playgroud)
仅对最顶层的文件夹执行此操作。在下面的任何地方启用继承,以便您的更改自动传播。
| 归档时间: |
|
| 查看次数: |
27918 次 |
| 最近记录: |