【问题标题】:Recursively set permissions on folders using Powershell?使用Powershell递归设置文件夹的权限?
【发布时间】:2018-01-23 20:37:38
【问题描述】:

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

  1. 从文件夹中删除所有 ACL
  2. 将 ACL 添加到文件夹
  3. 设置 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


【解决方案1】:

使用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)
...

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

【讨论】:

  • 嗨,我对应该把 $acl.SetAccessRuleProtection 放在哪里有点困惑。我在循环中得到了 $acl,但你说只将它应用到最顶层的文件夹。
  • 根本不递归。让继承处理权限传播。
  • 那么通过对根文件夹设置权限,它会自动设置所有子文件夹(甚至是子/子...文件夹)的权限?
  • 它应该除非有人已经篡改了那里的继承设置。如果是这种情况,请使用 icacls 重置文件夹子树 (icacls "C:\perms" /reset /t /c) 中的权限,然后将您的权限更改重新应用到 c:\perms
  • 好的,我获得了要删除的权限,我更新了关于添加多个 ace 的帖子
猜你喜欢
  • 2023-03-28
  • 2012-03-04
  • 2012-12-26
  • 2016-08-01
  • 2015-07-08
  • 1970-01-01
  • 2018-12-03
  • 2012-01-20
  • 2014-09-28
相关资源
最近更新 更多