Проблема наследования папок Powershell - PullRequest
0 голосов
/ 09 сентября 2010

У меня проблемы со скриптом powershell. Я в основном пытаюсь сбросить разрешение для папки, удалив следующие группы

  • NT AUTHORITY \ Authenticated Users
  • BUILTIN \ Users

Если я вручную изменю папку, чтобы не наследовать от нее родительский сценарий, я посмотрю в Google, чтобы найти лучший способ удаления наследования с помощью сценария, который сценарий компилирует, но ничего не делает.

Это команда, которую я использую

$WebsiteACL =Get-Acl -Path "C:\websites"
$WebsiteACL.SetAccessRuleProtection($true,$false)

У кого-нибудь есть предложение?

Ответы [ 2 ]

1 голос
/ 10 сентября 2010

Get-Acl/Set-Acl может быть королевской болью, если вы не владелец объекта, для которого вы пытаетесь изменить разрешения - даже если вы администратор.Если вы хотите изменить ACL для объекта, который вам не принадлежит, вы должны включить SeBackupPrivilege для своей личности / учетной записи.Единственный простой способ изменить системные привилегии - это установить PowerShell Community Extensions и использовать Get/Set-Privilege.Я действительно не понимаю, почему существует это ограничение, но оно существует.

С учетом сказанного, использование icacls работает очень хорошо в большинстве условий.Существует ошибка при настройке разрешений для каталога, к которому осуществляется доступ через общий ресурс с включенным перечислением на основе доступа.Все делают это правильно?;)

При прикосновении к каталогу под управляемым общим ресурсом ABE с помощью icacls каталог исчезает, даже если у вас все еще есть разрешения на этот каталог.Если вы используете редактор ACL проводника Windows для чтения и (повторного) применения разрешений, установленных с помощью icacls, каталог снова становится видимым.

После долгих царапин было установлено, что icacls что-то делает для синхронизации бит.Без синхронизация ABE делает каталог невидимым.Самый простой обходной путь - не использовать ABE, но в нашей среде отключение ABE невозможно.

Другим решением является использование SetACL.exe, которое можно загрузить с SourceForge.У него очень сложный синтаксис, imho, но он действительно мощный.Он также доступен как OCX, так что вы можете написать его через PowerShell.

1 голос
/ 09 сентября 2010

Лично я нахожу Get-Acl и Set-Acl все еще слишком много PITA для использования (и я - C # dev)Вы можете использовать icacls.exe для легкого выполнения вашей задачи:

icacls C:\temp\foo /inheritance:d

Он также поддерживает удаление групп.Проверьте его использование: icacls /?.

...