Получить ACL объекта AD-LDS с помощью Powershell get-acl

Я вручную установил некоторые пользовательские DACL на некоторых объектах AD-LDS, используя LDP. Я пытаюсь написать скрипт, который экспортирует эти ACL (пока только DACL) в форме SDDL.

Я могу получить объект AD-LDS с помощью этого кода:

$obj = Get-ADOrganizationalUnit -Filter {Name -Like 'stuff'} -searchbase "OU=apps,DC=example,DC=com" -server 'localhost:389'
$obj[0].distinguishedName
OU=stuff,OU=apps,DC=example,DC=com

Мне известна команда get-acl Powershell и ее синтаксис с поддержкой Active Directory, но когда я пробую ее на своем объекте AD-LDS, произойдет сбой с

Get-Acl : Cannot find path 'OU=stuff,OU=apps,DC=example,DC=com' because 
it does not exist.
At line:1 char:9
+ (Get-Acl <<<<  "DC=example,DC=com").access
    + CategoryInfo          : ObjectNotFound: (:) [Get-Acl], ItemNotFoundException
    + FullyQualifiedErrorId : GetAcl_PathNotFound_Exception,Microsoft.PowerShell.Commands.GetAclCommand

Я попытался префикс команды get-acl с AD: префикс, а также ldap://localhost/, но ошибка остается прежней. Я также не смог получить DACL других типов объектов (например, user а также group).

Как я могу использовать Powershell для получения DACL объекта AD-LDS в форме SDDL?

2 ответа

У меня был тот же вопрос, но я не нашел правильного ответа в Интернете. Мне потребовалось много времени, чтобы найти рабочее решение. Поскольку это обсуждение является одним из лучших результатов на обычных поисковых системах, но не дает реального ответа, я решил опубликовать его здесь:

Следующий вопрос подтолкнул меня в правильном направлении: Как настроить размещение объявлений: в другой домен активного каталога с помощью Powershell

Я проверил это с Windows 2012R2 (который, я думаю, имеет Powershell 4.0)

Предполагая, что у вас есть экземпляр AD LDS, работающий на "server:port" с суффиксом "dc=root,dc=com", следующий код выведет на экран ACL этого узла суффикса, используя get-acl:

  1. добавьте модуль active directory:

Импорт-Модуль ActiveDirectory

  1. вам нужно определить новый идентификатор доступа, похожий на "AD:". Этот идентификатор привязан к вашему текущему сеансу Powershell: (В этом примере используется "myLDS:", но вы можете определить любую желаемую строку идентификатора)

New-PSDrive -Name myLDS -PSProvider ActiveDirectory -Server "сервер: порт" -Scope Global -Root "//RootDSE/"

  1. и, наконец, вы можете использовать этот новый идентификатор для доступа к хранящимся в LDS acls и, например, распечатать их на экране:

(Get-ACL 'myLDS: \ dc = root, dc = com'). Доступ

Обратите внимание, что get-acl и dsacls.exe различаются по выводу. 'get-acl' будет возвращать необработанные идентификаторы SID субъектов, в то время как dsacls внутренне преобразует идентификаторы SID в DN и возвращает DN. Поэтому, если вы используете 'get-acl', но вам нужны DN, вам нужно выполнить это преобразование самостоятельно с помощью дополнительного запроса LDAP.

Пытаться:

dsacls 'OU = вещи,OU= приложения,DC= пример,DC=com'

Я вижу некоторые интересные вещи с PowerShell и подозреваю, что это связано с разрешениями. Тем не менее, попробуйте:

Get-ADOrganizationalUnit -Filter 'name -eq "stuff"'

Это может работать, поиграться с методами и атрибутами в Get-ADOrganizationalUnit, которые могут помочь изолировать проблему

Когда я найду причину своих проблем, я обновлю этот пост.

Другие вопросы по тегам