gpt4 book ai didi

powershell - 使用Powershell递归设置文件夹的权限?

转载 作者:行者123 更新时间:2023-12-01 16:28:54 25 4
gpt4 key购买 nike

我有一个目录,我想递归地遍历该目录并设置所有文件夹的权限。所以操作顺序应该是:

  1. 从文件夹中删除所有 ACL
  2. 向文件夹添加 ACL
  3. 设置 ACL

我尝试了以下代码,但收到错误

Cannot set the ACL because the method that it needs to invoke, SetSecurityDescriptor, does not exist.

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)

最佳答案

使用SetAccessRuleProtection()禁用继承并删除继承的 ACE:

$acl.SetAccessRuleProtection($true, $false)

使用RemoveAccessRule()删除现有的(非继承的)ACE:

$acl.Access | ForEach-Object { $acl.RemoveAccessRule($_) | Out-Null }

使用AddAccessRule()添加新的 ACE:

$ace = New-Object Security.AccessControl.FileSystemAccessRule "user", ...
$acl.AddAccessRule($ace)
...

仅对最顶层的文件夹执行此操作。在下面的所有地方启用继承,这样您的更改就会自动传播。

关于powershell - 使用Powershell递归设置文件夹的权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48410379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com