Настройка атрибута записи члена в ACL для объекта Active Directory с помощью powershell

Я хотел бы программно разрешить данному участнику безопасности (пользователю или группе) в AD иметь разрешение на запись в атрибут member в группе AD.

Я предполагаю, что это будет форма:

$GroupObject = Get-ADGroup $group
$ACL = Get-ACL AD:$GroupObject
$ACE = New-Object System.Security.AccessControl.ActiveDirectoryAccessRule (
    $manager,
    ...
)
$ACL.AddAccessRule($ACE)
Set-ACL -Path AD:$GroupObject -AclObject $ACL

Чего я не могу найти, так это документации о том, что еще нужно сделать в ..., чтобы это заработало. Даже нырять, делая это вручную и проверяя результирующие объекты ACL, оказывается трудным!


person foo    schedule 24.05.2018    source источник


Ответы (1)


Вы должны использовать этот конструктор для ActiveDirectoryAccessRule: https://msdn.microsoft.com/en-us/library/cawwkf0x(v=vs.110).aspx

Это должно выглядеть примерно так:

$ACE = New-Object System.DirectoryServices.ActiveDirectoryAccessRule(
    $manager.SID,
    [System.DirectoryServices.ActiveDirectoryRights]::WriteProperty,
    [System.Security.AccessControl.AccessControlType]::Allow,
    "bf9679c0-0de6-11d0-a285-00aa003049e2",
    [DirectoryServices.ActiveDirectorySecurityInheritance]::All
)

Обратите внимание, что вам нужно передать SID пользователя ($manager.SID).

Таинственный GUID — это GUID атрибута member. Вы можете найти это, просмотрев документацию Microsoft для атрибутов. Это страница для member, где вы можете найти «System-Id-Guid»: https://msdn.microsoft.com/en-us/library/ms677097(v=vs.85).aspx

person Gabriel Luci    schedule 24.05.2018
comment
Кстати, пока у меня загружен модуль ActiveDirectory в PowerShell, теперь он жалуется: New-Object : Cannot find type [System.Security.AccessControl.ActiveDirectoryAccessRule]: verify that the assembly containing this type is loaded. Я пробовал add-type -AssemblyName System.DirectoryServices безрезультатно. - person foo; 25.05.2018
comment
О, я даже не заметил разницы в типах, но теперь я вижу, что использовал System.DirectoryServices.ActiveDirectoryAccessRule, что отличается от того, что вы использовали. Попробуй это. Я протестировал свой код с группой в нашем домене, и он сработал. - person Gabriel Luci; 25.05.2018
comment
Спасибо - так и есть - person foo; 25.05.2018