Я хочу передать управление TestUsers
организационная единица пользователю NickA
и дайте ему следующие разрешения:
Create, delete, and manage user accounts
Reset user passwords and force password change at next logon
Read all user information
Create, delete and manage groups
Modify the membership of a group
Единственный метод, который я нашел, - это следующий, но я не могу найти правильные разрешения для назначения:
$acc = Get-ADUser NickA
$sid = new-object System.Security.Principal.SecurityIdentifier $acc.SID
$guid = new-object Guid bf967aba-0de6-11d0-a285-00aa003049e2
$ou = Get-ADOrganizationalUnit -Identity TestUsers
$acl = Get-ACL -Path "AD:$($ou.DistinguishedName)"
$acl.AddAccessRule($(new-object System.DirectoryServices.ActiveDirectoryAccessRule $sid,"CreateChild,DeleteChild","Allow",$guid))
Set-ACL -ACLObject $acl -Path "AD:$($ou.DistinguishedName)"
Наконец я сделал это с помощью PowerShell. Благодаря следующим сообщениям TechNet Справочник по GUID Exchange 2007 и Обновить скелет ACL Я смог делегировать управление организационным подразделением TestUsers пользователю NickA и предоставить разрешения, которые я изначально опубликовал.
$OU = Get-ADOrganizationalUnit -Identity "OU=TestUsers,DC=contoso,DC=private"
$SID = new-object System.Security.Principal.SecurityIdentifier $(Get-ADUser "NickA").SID
$GUIDUserOBJ = new-object Guid bf967aba-0de6-11d0-a285-00aa003049e2
$GUIDGroupOBJ = new-object Guid bf967a9c-0de6-11d0-a285-00aa003049e2
$GUIDNull = new-object Guid 00000000-0000-0000-0000-000000000000
$ACL = Get-ACL -Path "AD:$($OU.DistinguishedName)"
#Create a hashtable to store the GUID value of each schema class and attribute
$ADRootDSE = Get-ADRootDSE
$GUIDMap = @{}
Get-ADObject -SearchBase ($ADRootDSE.SchemaNamingContext) -LDAPFilter "(schemaidguid=*)" -Properties lDAPDisplayName,schemaIDGUID | % {$GUIDMap[$_.lDAPDisplayName]=[System.GUID]$_.schemaIDGUID}
$ACL.AddAccessRule((New-Object System.DirectoryServices.ActiveDirectoryAccessRule $SID,"CreateChild,DeleteChild","Allow",$GUIDUserOBJ,"ALL"))
$ACL.AddAccessRule((New-Object System.DirectoryServices.ActiveDirectoryAccessRule $SID,"GenericAll","Allow",$GUIDNull,"Descendents",$GUIDMap["user"]))
$ACL.AddAccessRule((New-Object System.DirectoryServices.ActiveDirectoryAccessRule $SID,"CreateChild,DeleteChild","Allow",$GUIDGroupOBJ,"ALL"))
$ACL.AddAccessRule((New-Object System.DirectoryServices.ActiveDirectoryAccessRule $SID,"GenericAll","Allow",$GUIDNull,"Descendents",$GUIDMap["group"]))
Set-ACL -ACLObject $ACL -Path "AD:$($OU.DistinguishedName)"
Я еще не занимался построением ACL с помощью PowerShell, но это можно сделать с помощью старой команды DSACLS, которая была частью RSAT и средств поддержки с Windows Server 2003.
dsacls "OU=Test,DC=domain,DC=com" /I:S /G "domain\user:CA;Reset Password";user
Поместите DN делегированного OU в кавычки и поместите пользователя после параметра / G (grant). В /I:S
указывает ACE наследовать только дочерние объекты, а параметр CA
Параметр обозначает контрольный доступ.
Подробнее о синтаксисе можно найти на TechNet или другие сайты. Если вам нужно использовать PowerShell, ознакомьтесь с Обновить документацию поставщика Active Directory ACL.