Страница 1 из 1

Как установить наследование прав для дочерних папок

СообщениеДобавлено: 22 ноя 2010 16:38, Пн
UncleFather
Проблема:

Имеется файловый сервер с папкой, в которой лежит множество пользовательских папок. По условиям задачи - права от родительской папки на пользовательские папки наследовать нельзя! Необходимо добавить нового пользователя с правами на изменение ко всем пользовательским папкам так, чтобы эти права распространились и на дочерние папки.

Решение:

Создаем PowerShell скрипт (файлик с именем ChgPerm.ps1)

Код: Выделить всё
$inheritCO = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit"
$propagationIO = [system.security.accesscontrol.PropagationFlags]"InheritOnly"
$PropagationN = [system.security.accesscontrol.PropagationFlags]"None"
foreach ($item in Get-ChildItem -LiteralPath D:\Users_Dirs\ -Force | Where-Object {!$item.PSIsContainer}) {
echo $item
$ACL = Get-Acl D:\Users_Dirs\$item
$AccessRule = new-object System.Security.AccessControl.FileSystemAccessRule(
    "Domain\User1", "Modify", $inheritCO, $propagationN,  "Allow"
)
$ACL.SetAccessRule($AccessRule)
$AccessRule = new-object System.Security.AccessControl.FileSystemAccessRule(
    "Domain\User2", "Modify", $inheritCO, $propagationN,  "Allow"
)
$ACL.SetAccessRule($AccessRule)
$AccessRule = new-object System.Security.AccessControl.FileSystemAccessRule(
    "SYSTEM", "FullControl", $inheritCO, $propagationN,  "Allow"
)
$ACL.SetAccessRule($AccessRule)
$ACL | Set-Acl D:\Users_Dirs\$item
}

здесь:
  • $propagationIO - используем в случае, если права нужно ставить ТОЛЬКО на дочерние папки пользовательских папок;
  • $propagationN - используем в случае, если права нужно ставить и на дочерние папки и на пользовательские папки;

Этот пример добавит к существующим следующие права с наследованием на все дочерние подпапки папки "D:\Users_Dirs\":
  • Domain\User1 - на изменение
  • Domain\User12- на изменение
  • System - полные права