Я хочу передать управление организационным подразделением TestUsers
пользователю NickA
и предоставьте ему следующие разрешения:
Создание, удаление и управление учетными записями пользователей
Сброс паролей пользователей и принудительное изменение пароля при следующем входе в систему
Прочитать всю информацию о пользователе
Создать, удалить и управлять группами
Изменить членство в группе
Единственный метод, который я нашел, - это следующий g, но я не могу найти правильные разрешения для назначения:
$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
означает Control Access.
Подробнее о синтаксисе можно найти на ] TechNet или другие сайты. Если вам нужно использовать PowerShell, ознакомьтесь с документацией к поставщику Active Directory для обновления ACL .