2015-11-01 1 views
0

Я пытаюсь написать сценарий, который может удалить права доступа только для одного (например, для всех) в папках с унаследованными разрешениями.Удаление только одного разрешения наследования с помощью PowerShell

Другие права наследования должны оставаться неизменными. Я могу удалить разрешения наследования, а затем удалить доступ для этой группы, но наследование будет нарушено. Я не хочу включать наследование после этого действия из-за того, что вложенные папки не имеют разбиения наследования.

Как просто удалить эту группу, не путаясь с остальными разрешениями?

ответ

6

Вы не можете (по дизайну) удалить унаследованное разрешение, «не возиться с остальными разрешениями».

Что вы можете сделать

  1. Disallow наследование, но сохраняющие уже наследственные правила
  2. Удалить/изменить EVERYONE ACE после удаления наследования

Как это:

$FilePath = "C:\parentFolder\childItem.ext" 
$FileACL = Get-Acl $FilePath 

# Remove inheritance but preserve existing entries 
$FileACL.SetAccessRuleProtection($true,$true) 
Set-Acl $FilePath -AclObject $FileACL 

# Retrieve new explicit set of permissions 
$FileACL = Get-Acl $FilePath 

# Retrieve "everyone" rule 
$EveryoneRule = $FileACL.GetAccessRules($true,$true,[System.Security.Principal.NTAccount]) | Where-Object {$_.IdentityReference -eq [System.Security.Principal.NTAccount]"EVERYONE"} 

# Remove it - or modify it and use SetAccessRule() instead 
$FileACL.RemoveAccessRule($EveryoneRule) 

# Set ACL on file again 
Set-Acl $FilePath -AclObject $FileACL 
0

Чтобы удалить группы или пользователей ACE без отключения наследования, используйте CACLS папка/E/R группа/пользователь. Я знаю, что CACLS устарел, но я не нашел эквивалента при использовании iCacls или SETACL.