我需要为特定本地组授予几个本地文件夹的权限。我正在使用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