Создаем структуру OU в Active Directory с помощью PowerShell

Довольно часто администратору Active Directory при создании новых организационных единиц (OU — Organizational Units) нужно сразу создать определенную структуру вложенных контейнеров внутри новой OU. Например, при открытии нового филиала вам нужно создать в новом OU контейнеры для пользователей, групп, серверов и сервисных аккаунтов. Чтобы не создавать OU и не раздавать на них права вручную из консоли ADUC (dsa.msc) , вы можете использовать PowerShell скрипт из этой статьи. Скрипт не только создает новые контейнеры, но и создает административные группы и предоставляет им права на новые OU.

Для создания нового OU в Active Directory используется командлет New -ADOrganizationalUni t из модуля RSAT-AD-PowerShell . Чтобы создать OU в указанном контейнере можно использовать такую команду:

Import-Module ActiveDirectory

New-ADOrganizationalUnit -Name "Users" -Path “OU=KZN,OU=RU,DC=resource,DC=loc” –Description “Контейнер для пользователей Казани” -PassThru

Если не указывать параметр Path, новый OU будет создан в корне AD.

По умолчанию при создании контейнеров AD для них включена опция защиты от удаления ( ProtectedFromAccidentalDeletion ). Вы можете отключить эту опцию, или изменить любой другой атрибут Organizational Unit в Active Directory с помощью Set-ADOrganizationalUnit:

Get-ADOrganizationalUnit -Identity “OU=Users,OU=KZN,OU=RU,DC=resource,DC=loc”| Set-ADOrganizationalUnit -ProtectedFromAccidentalDeletion $false

Для удаления OU со всеми вложенными объектами используется такая команда:

Remove-ADObject -Identity "OU=Users,OU=KZN,OU=RU,DC=resource,DC=loc” -Recursive

Рассмотрим небольшой PowerShell скрипт, который позволяет автоматизирвать создание типовой структуры OU для новых подразделений в Active Directory.

Допустим, в вашей компании принято создать для каждого филиала отдельный OU со следующей структурой вложенных контейнеров:

Название_города ---Admins ---Computers ---Contacts ---Groups ---Servers ---Service Accounts ---Users 

После создания структуры OU вам нужно создать группы администраторов в AD и делегировать для них права на OU:

типовая структура OU филиала компании в Active Directory

Ниже приведена базовая версия такого PowerShell скрипта с комментариями. Код скрипт CreateOUStructure.ps1 доступен в нашем GitHub:

# Задаем название контейнера
$City = "NSK"
$CityRu="Новосибирск"
$DomainDN=(Get-ADDomain).DistinguishedName
$OUs = @(
"Admins",
"Computers",
"Contacts",
"Groups",
"Servers",
"Service Accounts",
"Users"
)
# создаем OU
$newOU=New-ADOrganizationalUnit -Name $City –Description “Контейнер для пользователей $CityRu” -PassThru
ForEach ($OU In $OUs) {
New-ADOrganizationalUnit -Name $OU -Path $newOU
}
#Создаем административные группы
$adm_grp=New-ADGroup ($City+ "_admins") -path ("OU=Admins,OU="+$City+","+$DomainDN) -GroupScope Global -PassThru –Verbose
$adm_wks=New-ADGroup ($City+ "_account_managers") -path ("OU=Admins,OU="+$City+","+$DomainDN) -GroupScope Global -PassThru –Verbose
$adm_account=New-ADGroup ($City+ "_wks_admins") -path ("OU=Admins,OU="+$City+","+$DomainDN) -GroupScope Global -PassThru –Verbose
##### Пример установки прав на сброс паролей для группы _account_managers на OU Users
$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="+$City+","+$DomainDN)
$adm_accountSID = [System.Security.Principal.SecurityIdentifier]$adm_account.SID
#строим строку Access Control Entry (ACE)
$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)
# Применяем ACL
$acl.AddAccessRule($ace)
Set-Acl -Path ("AD:OU=Users,OU="+$City+","+$DomainDN) -AclObject $acl
######

Заполните переменные в начале скрипт и запустите его (не забудьте про политику выполнения скриптов PowerShell). Скрипт должен создать нужную структуру OU, группы и делегировать права на сброс паролей в контейнер Users.

powershell скрипт: создать структуру OU и делегировать права на новые контейнеры

Для назначения прав используется командлет Set-ACL, который также позволяет назначать NTFS разрешения на папки .

Можно дополнить скрипт, добавив типовые операции, которые вы выполняете при создании OU для нового филиала.

Например, можно с помощью PowerShell создать групповые политики и сразу назначить их на OU:

$wksGPO=New-GPO -Name ($City + “_WKS_Policy”) -Comment "$City Workstations Policy"
Get-GPO $wksGPO | New-GPLink -Target ("OU=Computers,OU="+$City+","+$DomainDN") -LinkEnabled Yes

EnglishRussianUkrainian