ACL 权限,从字符串值多重继承
ACL rights, multiple inheritance from string value
我正在尝试创建一个函数来设置 ACL 权限,所有来自 XML 的数据都是字符串,我在继承部分遇到了麻烦。使用此代码...
$workingPermissions = Get-Acl $target
$acRights = [System.Security.AccessControl.FileSystemRights]$rights
$acInheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::$inheritance
$acPropagationFlag = [System.Security.AccessControl.PropagationFlags]::$propagation
$acType =[System.Security.AccessControl.AccessControlType]::Allow
$acUser = New-Object System.Security.Principal.NTAccount($principal)
$acEntry = New-Object System.Security.AccessControl.FileSystemAccessRule ($acUser, $acRights, $acInheritanceFlag, $acPropagationFlag, $acType)
当只使用一个继承标志时一切正常,但是当 $inheritance = "ContainerInherit,ObjectInherit" 时它失败了。 $rights 的构建方式相同,但我的理解是,无论出于何种原因,继承(和传播?)的行为方式都不相同。
我在几年前发现了 this thread,但我没有看到基于 -bor 的解决方案在哪里允许任何基于字符串的输入。事实上,我根本不理解它,因为它似乎 $is 只是被设置为一个枚举,它当然包含两个设置了 $flag 的枚举。
不管怎样,希望有人能提供我自己的代码所需的动力,也许还能让我了解链接解决方案中真正发生的事情。
将传播标志保留为 None、
试试这个,对我有用
$SAMAccountName = "SamAccountName" ## Type your User/Group SamAccountName
$Rights = "ReadAndExecute"
$InheritanceFlag = @("ContainerInherit","ObjectInherit")
$PropagationFlag = "None"
$AccessType = "Allow"
$NTAccount = [System.Security.Principal.NTAccount]($SAMAccountName)
$IdentityReference = $NTAccount.Translate([System.Security.Principal.SecurityIdentifier])
$AccessRights = [System.Security.AccessControl.FileSystemRights] $Rights
$InheritanceFlags = [System.Security.AccessControl.InheritanceFlags]$InheritanceFlag
$PropagationFlags = [System.Security.AccessControl.PropagationFlags]$PropagationFlag
$Type = [System.Security.AccessControl.AccessControlType]$AccessType
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($IdentityReference, $AccessRights, $InheritanceFlags,$PropagationFlags,$Type)
$ACL = Get-Acl $Folder
$ACL.AddAccessRule($AccessRule)
Set-Acl -Path $Folder -AclObject $ACL
我正在尝试创建一个函数来设置 ACL 权限,所有来自 XML 的数据都是字符串,我在继承部分遇到了麻烦。使用此代码...
$workingPermissions = Get-Acl $target
$acRights = [System.Security.AccessControl.FileSystemRights]$rights
$acInheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::$inheritance
$acPropagationFlag = [System.Security.AccessControl.PropagationFlags]::$propagation
$acType =[System.Security.AccessControl.AccessControlType]::Allow
$acUser = New-Object System.Security.Principal.NTAccount($principal)
$acEntry = New-Object System.Security.AccessControl.FileSystemAccessRule ($acUser, $acRights, $acInheritanceFlag, $acPropagationFlag, $acType)
当只使用一个继承标志时一切正常,但是当 $inheritance = "ContainerInherit,ObjectInherit" 时它失败了。 $rights 的构建方式相同,但我的理解是,无论出于何种原因,继承(和传播?)的行为方式都不相同。 我在几年前发现了 this thread,但我没有看到基于 -bor 的解决方案在哪里允许任何基于字符串的输入。事实上,我根本不理解它,因为它似乎 $is 只是被设置为一个枚举,它当然包含两个设置了 $flag 的枚举。 不管怎样,希望有人能提供我自己的代码所需的动力,也许还能让我了解链接解决方案中真正发生的事情。
将传播标志保留为 None、
试试这个,对我有用
$SAMAccountName = "SamAccountName" ## Type your User/Group SamAccountName
$Rights = "ReadAndExecute"
$InheritanceFlag = @("ContainerInherit","ObjectInherit")
$PropagationFlag = "None"
$AccessType = "Allow"
$NTAccount = [System.Security.Principal.NTAccount]($SAMAccountName)
$IdentityReference = $NTAccount.Translate([System.Security.Principal.SecurityIdentifier])
$AccessRights = [System.Security.AccessControl.FileSystemRights] $Rights
$InheritanceFlags = [System.Security.AccessControl.InheritanceFlags]$InheritanceFlag
$PropagationFlags = [System.Security.AccessControl.PropagationFlags]$PropagationFlag
$Type = [System.Security.AccessControl.AccessControlType]$AccessType
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($IdentityReference, $AccessRights, $InheritanceFlags,$PropagationFlags,$Type)
$ACL = Get-Acl $Folder
$ACL.AddAccessRule($AccessRule)
Set-Acl -Path $Folder -AclObject $ACL