Получить 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:
- добавьте модуль active directory:
Импорт-Модуль ActiveDirectory
- вам нужно определить новый идентификатор доступа, похожий на "AD:". Этот идентификатор привязан к вашему текущему сеансу Powershell: (В этом примере используется "myLDS:", но вы можете определить любую желаемую строку идентификатора)
New-PSDrive -Name myLDS -PSProvider ActiveDirectory -Server "сервер: порт" -Scope Global -Root "//RootDSE/"
- и, наконец, вы можете использовать этот новый идентификатор для доступа к хранящимся в 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, которые могут помочь изолировать проблему
Когда я найду причину своих проблем, я обновлю этот пост.