【问题标题】:How can I give multiple users/groups acl permissions for the same folder?如何为同一文件夹授予多个用户/组 acl 权限?
【发布时间】:2020-09-05 08:44:02
【问题描述】:

所以我有一个文件夹结构脚本,它使用 Excel 列表中的权限创建文件夹。 在该列表中有特定权限的列,在这些列中我想写下我想授予权限的用户名。脚本被编程为在 Excel 文件中逐行运行。话虽如此,我希望将用户名写在一行上。现在,当我写一个名字时它可以工作,但有多个名字却不行,我已经将整个单元格转换为数组,尝试使用 foreach 循环。还是不行。 这是脚本的那一部分:

$acl = Get-Acl $homedir
$FileSystemRights = [System.Security.AccessControl.FileSystemRights]"Modify"
$AccessControlType = [System.Security.AccessControl.AccessControlType]::Allow
$InheritanceFlags = [System.Security.AccessControl.InheritanceFlags]"ContainerInherit, ObjectInherit"
$PropagationFlags = [System.Security.AccessControl.PropagationFlags]"None"
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule ($users, $FileSystemRights, $InheritanceFlags, $PropagationFlags, $AccessControlType)
$acl.AddAccessRule($AccessRule)

所以$users 这是用户名所在的 excel 单元格,它们看起来像这样

user1,user2

现在 foreach 循环是一个很好的解决方案,但不知何故它不起作用并且总是给"Cannot convert value "user1" to type "System.Int32". Error: "Input string was not in a correct format" 有人可以告诉我我在这里做错了什么吗?

【问题讨论】:

  • 考虑使用这个模块:powershellgallery.com/packages/NTFSSecurity/4.2.4 它真的很容易使用,相当灵活,而且你不需要让你的生活复杂化,使用类型。我已经在多个场合使用过它,它就像一个魅力!不仅要申请权限,还要审核和报告。
  • 编辑您的代码以反映您的尝试。 ForEach-Object 循环应该可以正常工作
  • 谢谢!但我有点需要用脚本来完成这项工作,因为这是我公司的一个持续过程,脚本的全部目的是使整个事情自动化,这样我们就不必再手动完成了。跨度>
  • 请出示一些您的 Excel 文件。如果所有用户都在一个单元格中,以逗号分隔,则获取单元格的值,在逗号上拆分以获取用户数组并循环

标签: powershell directory permissions acl


【解决方案1】:

你试过了吗?

$acl = Get-Acl $homedir
$FileSystemRights = [System.Security.AccessControl.FileSystemRights]"Modify"
$AccessControlType = [System.Security.AccessControl.AccessControlType]::Allow
$InheritanceFlags = [System.Security.AccessControl.InheritanceFlags]"ContainerInherit, ObjectInherit"
$PropagationFlags = [System.Security.AccessControl.PropagationFlags]"None"

foreach ($user in $users) {

    $ace = New-Object Security.AccessControl.FileSystemAccessRule ("$user",$FileSystemRights, $InheritanceFlags, $PropagationFlags, $AccessControlType)
    $acl.AddAccessRule($ace)
}

【讨论】:

    【解决方案2】:

    谢谢大家,怀疑论者的建议似乎可以解决问题。 必须使用 foreach-object 循环而不是 foreach 循环。 工作代码:

    $users | ForEach-Object{
    $acl = Get-Acl $homedir
    $FileSystemRights = [System.Security.AccessControl.FileSystemRights]"Fullcontrol"
    $AccessControlType = [System.Security.AccessControl.AccessControlType]::Allow
    $InheritanceFlags = [System.Security.AccessControl.InheritanceFlags]"ContainerInherit, ObjectInherit"
    $PropagationFlags = [System.Security.AccessControl.PropagationFlags]"None"
    $AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule ($_, $FileSystemRights, $InheritanceFlags, $PropagationFlags, $AccessControlType)
    $acl.setAccessRule($AccessRule)
    $acl | Set-Acl "$homedir"
    }
    

    【讨论】:

      猜你喜欢
      • 2014-12-05
      • 2019-06-18
      • 2011-11-20
      • 2013-12-06
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      相关资源
      最近更新 更多