2015-06-28 2 views
0

Я пытаюсь создать функцию, которая будет устанавливать разрешения ACL, со всеми данными, поступающими из XML в виде строк, и я беспокоюсь с частью Наследования. с этим кодом ...Права ACL, множественное наследование от строкового значения

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

все отлично работает, когда используется только один флаг наследования, но когда $ Наследование = «ContainerInherit, ObjectInherit» он выходит из строя. $ права построены таким же образом, но я понимаю, что по какой-либо причине Наследование (и распространение?) не ведет себя одинаково. Я нашел this thread с нескольких лет назад, и я не вижу, где решение на основе -bor позволит использовать любой ввод на основе строки. В самом деле, я вообще не понимаю его, поскольку, как представляется, $ is просто устанавливается на перечисление, которое, конечно же, содержит оба перечисления, в которых установлен флаг $. В любом случае, надеясь, что кто-то сможет обеспечить свой собственный кодекс и, возможно, подскажет мне, что действительно происходит в связанном решении.

ответ

1

Оставьте флаг Размножение в 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 
+0

Dang, как если бы я пропустил, что он принимает массив. Конечно, почему на самом деле права работают со строкой, но Inheritance требует массив? В любом случае ... с небольшим -replace и .split, у меня есть моя удобочитаемая строка для преобразования в массив, и я ухожу на гонки. Благодаря! – Gordon

Смежные вопросы