Создание структуры организационных единиц (OU) в Active Directory с помощью PowerShell

Довольно часто при создании новых организационных единиц (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

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

По умолчанию при создании контейнеров 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).

Иерархия организационных единиц Active Directory для филиалаИерархия организационных единиц Active Directory для филиала

Здесь представлена базовая версия этого сценария 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.

Создание вложенных OU, групп и назначение разрешений AD с помощью сценария PowerShell Создание вложенных OU, групп и назначение разрешений AD с помощью сценария PowerShell

Чтобы назначить привилегии AD, используйте команду 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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *