为本地组设置文件夹 ACL

为本地组设置文件夹 ACL

我需要为特定本地组授予几个本地文件夹的权限。我正在使用System.Security.AccessControl.FileSystemAccessRule。它看起来像这样:

$aclFolders =  Join-Path -Path $env:windir -ChildPath "\temp\"
$group = "sql\IIS_IUSRS"
$Acl = Get-Acl $aclFolders
$Ar = New-Object System.Security.AccessControl.FileSystemAccessRule($group, "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow")
$Acl.SetAccessRule($Ar)
Set-Acl $aclFolders $Acl

sql\IIS_IUSRS是一个本地组如果我在其上运行脚本(或者甚至使用 sql\Administrators),我会得到以下信息:

使用“1”个参数调用“SetAccessRule”时发生异常:“无法翻译部分或全部身份引用。” 位于 C:\projects\dsc.quickstart\sitecore-web-role\install.ps1:16 char:1 + $Acl.SetAccessRule($Ar) + ~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : IdentityNotMappedException

我想知道该功能是否仅适用于用户而不适用于群组。提前感谢您的帮助。

答案1

在以自己的语言推出的 W10 系统上,它也失败了。“Everyone”没有翻译成“Iedereen”,因此对于标准 SID,最好使用 GUI

$acl = Get-Acl -Path <FolderName> 

$objSID = New-Object System.Security.Principal.SecurityIdentifier ("S-1-1-0")
$objUser = $objSID.Translate( [System.Security.Principal.NTAccount])
$Name = $objUser.Value


Write-Host $Name #will show translated sid in local language
        $InheritanceFlag = @([System.Security.AccessControl.InheritanceFlags]::ContainerInherit,[System.Security.AccessControl.InheritanceFlags]::ObjectInherit)
        $PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None
        $rule = New-Object System.Security.AccessControl.FileSystemAccessRule ("$Name","FullControl",$InheritanceFlag,$PropagationFlag,"Allow")
        $acl.SetAccessRule($rule)
        Set-Acl -Path <FolderName> -AclObject $acl -Verbose -ErrorAction Stop

相关内容