如何为同一文件夹授予多个用户/组acl权限?

时间:2020-05-19 10:09:08

标签: powershell directory permissions acl

因此,我有一个文件夹结构脚本,该脚本使用Excel列表中的权限创建文件夹。 在该列表中,有特定权限的列,在这些专栏文章中,我想编写要授予权限的用户名。脚本被编程为在Excel文件中逐行进行。因此,我希望用户名写在一行上。现在,当我写一个名称可以使用,但使用多个名称却不能使用时,我已经将整个单元格转换为and数组,并使用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" 有人可以告诉我我在做什么错吗?

2 个答案:

答案 0 :(得分:0)

您尝试过吗?

$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)
}

答案 1 :(得分:0)

谢谢大家,持怀疑论者的建议似乎可以解决问题。 必须使用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"
}
相关问题