
Довольно часто при создании новых организационных единиц (OU) администратору Active Directory приходится создавать структуру вложенных контейнеров внутри новой OU. Например, когда компания открывает новый филиал, необходимо создать контейнеры AD для пользователей, групп, серверов и учетных записей служб в новой OU. Чтобы не создавать вручную вложенные OU и не назначать разрешения в оснастке ADUC (dsa.msc), можно использовать сценарий PowerShell из этой статьи для массового создания и настройки вложенных OU. Сценарий не только создает новые организационные единицы, но и создает административные группы безопасности и предоставляет им разрешения на новые OU.
Чтобы создать новую OU в Active Directory, используйте команду New-ADOrganizationalUnit команда из модуля RSAT-AD-PowerShell. Чтобы создать OU в указанном контейнере, можно использовать следующую команду:
Import-Module ActiveDirectory
New-ADOrganizationalUnit -Name "Users" -Path "OU=Berlin,OU=DE,DC=woshub,DC=com" –Description "Account container for Berlin users" -PassThru
По умолчанию при создании контейнеров AD используется параметр ProtectedFromAccidentalDeletion для них включена опция. Вы можете отключить его или изменить любой другой атрибут организационной единицы в Active Directory с помощью команды Set-ADOrganizationalUnit
команды:
Get-ADOrganizationalUnit -Identity “OU=Users,OU=Berlin,OU=DE,DC=woshub,DC=com”| Set-ADOrganizationalUnit -ProtectedFromAccidentalDeletion $false
Чтобы удалить OU со всеми вложенными объектами, выполните следующую команду:
Remove-ADObject -Identity "OU=Users,OU=Berlin,OU=DE,DC=woshub,DC=com” -Recursive
Давайте рассмотрим небольшой сценарий PowerShell для автоматического создания типичной структуры OU в Active Directory для нового филиала компании.
Предположим, что ваша компания имеет отдельный OU для каждого из своих филиалов со следующей структурой вложенных контейнеров:
Country -City_name --Admins --Computers --Contacts --Groups --Servers --Service Accounts --Users
После создания структуры OU необходимо создать группы администраторов филиалов в AD и делегировать им привилегии на новые OU:
- City_admins — администраторы филиалов (полный контроль над всеми OU филиалов);
- Управляющие_городскими_счетами — пользователи с привилегиями оператора учетной записи (создание новых пользователей, сброс пароля AD и т.д.). Назначайте разрешения только для OU Users и Service Accounts;
- City_wks_admins — Команда поддержки HelpDesk с правами администратора на компьютерах филиала (назначьте права на Computers OU, добавьте эту группу в группу локальных администраторов на компьютерах через GPO).
Здесь представлена базовая версия этого сценария PowerShell с комментариями. Сайт CreateBranchOUs.ps1 Код сценария доступен на моем репозитории GitHub:
#Create Active Directory OU structure, security groups and assign permissions for a new branch office
# Set the container name
$Country="DE"
$City = "HH"
$CityFull="Hamburg"
$DomainDN=(Get-ADDomain).DistinguishedName
$ParentOU= "OU="+$Country+",$DomainDN"
$OUs = @(
"Admins",
"Computers",
"Contacts",
"Groups",
"Servers",
"Service Accounts",
"Users"
)
# Create an OU for a new branch office
$newOU=New-ADOrganizationalUnit -Name $CityFull -path $ParentOU –Description “A container for $CityFull users” -PassThru
ForEach ($OU In $OUs) {
New-ADOrganizationalUnit -Name $OU -Path $newOU
}
#Create administrative groups
$adm_grp=New-ADGroup ($City+ "_admins") -path ("OU=Admins,OU="+$CityFull+","+$ParentOU) -GroupScope Global -PassThru –Verbose
$adm_wks=New-ADGroup ($City+ "_account_managers") -path ("OU=Admins,OU="+$CityFull+","+$ParentOU) -GroupScope Global -PassThru –Verbose
$adm_account=New-ADGroup ($City+ "_wks_admins") -path ("OU=Admins,OU="+$CityFull+","+$ParentOU) -GroupScope Global -PassThru –Verbose
##### An example of assigning password reset permissions for the _account_managers group on the Users OU
$confADRight = "ExtendedRight"
$confDelegatedObjectType = "bf967aba-0de6-11d0-a285-00aa003049e2" # User Object Type GUID
$confExtendedRight = "00299570-246d-11d0-a768-00aa006e0529" # Extended Right PasswordReset GUID
$acl=get-acl ("AD:OU=Users,OU="+$CityFull+","+$ParentOU)
$adm_accountSID = [System.Security.Principal.SecurityIdentifier]$adm_account.SID
#Build an Access Control Entry (ACE)string
$aceIdentity = [System.Security.Principal.IdentityReference] $adm_accountSID
$aceADRight = [System.DirectoryServices.ActiveDirectoryRights] $confADRight
$aceType = [System.Security.AccessControl.AccessControlType] "Allow"
$aceInheritanceType = [System.DirectoryServices.ActiveDirectorySecurityInheritance] "Descendents"
$ace = New-Object System.DirectoryServices.ActiveDirectoryAccessRule($aceIdentity, $aceADRight, $aceType, $confExtendedRight, $aceInheritanceType,$confDelegatedObjectType)
# Apply ACL
$acl.AddAccessRule($ace)
Set-Acl -Path ("AD:OU=Users,OU="+$CityFull+","+$ParentOU) -AclObject $acl
Установите переменные в начале сценария и запустите его (не забудьте проверить текущие настройки политики выполнения PowerShell). Сценарий создаст структуру OU и нужные вам группы, а также делегирует разрешения на сброс пароля в OU Users.
Set-ACL
команду, которая также позволяет назначать разрешения NTFS на файлы и папки.Вы можете расширить сценарий, добавив типичные операции, которые выполняются при создании OU для нового филиала.
Например, можно создать объекты групповых политик (GPO) с помощью PowerShell и связать их с OU:
$wksGPO=New-GPO -Name ($City +"_WKS_Policy") -Comment "$City Workstations Policy"
Get-GPO $wksGPO | New-GPLink -Target ("OU=Computers,OU="+$City+","+$ParentOU) -LinkEnabled Yes