PDA

Показать полную графическую версию : [решено] Добавление пользователей в AD в нужную OU


volk1234
12-04-2014, 13:55
Привет!

Есть скрипт, который отлично работает, берет из csv файла данные о пользователях и OU, добавляет куда надо.
#
# Читает users-list.csv. Cоздаёт OU, создает группы, создёт пользователей в AD, помещает пользователя в соостветствующие группы
#
# Путь к файлу с пользователями в переменной $path_to_csv
#
# CSV файл users-list.cvs
#
# Сохраняем из Excel как csv. Открываем блокнотом, заменяем ; на ,
# !!!!!! При сохранении указываем кодировку UNICODE !!!!
#
# Формат cvs и имена полей:
# Account,SECOND,NAME,SURNAME,ID,DEPARTAMENT,POSITION,PHONE_VN,WORK_PHONE,MOBILE,ROOM,PASS,DOMAIN,E_MA IL,OU,Security_group1,Security_group2,Security_group3


import-module activedirectory # импорт модуля в котором коммандлеты для работы с AD


# функция вызова New-ADUser с уже сформированными параметрами

function new_aduser($csv_line){ # передается строка прочитанная из файла

# формируем путь к OU
$ou=$csv_line.OU
$ou_path='ou=' + $ou + ',' + $dom.DefaultPartition


# формируем DisplayName ФИО
$name_full=$csv_line.SECOND+" "+$csv_line.NAME+" "+$csv_line.SURNAME

# формируем пароль
$passwd=(ConvertTo-SecureString $csv_line.PASS -AsPlainText -Force)

# формируем UserPrincipalName
$upn=$csv_line.ACCOUNT + "@" + $dom.DOMAIN

# формируем Discription
$discr=$csv_line.POSITION +", комната "+ [String]$csv_line.ROOM + ", вн.тел. " + [String]$csv_line.PHONE_VN

# проверить существует ли OU, если нет - создаем
try{
$tmp_1=Get-ADOrganizationalUnit -Identity $ou_path
}
catch{
New-ADOrganizationalUnit -Name $ou -ProtectedFromAccidentalDeletion $false
}


#
# Создаем пользователя в AD. Пользователь должен сменить пароль при следующем входе.
#
New-ADUser -Path $ou_path `
-UserPrincipalName $upn -SamAccountName $csv_line.ACCOUNT `
-Name $csv_line.ACCOUNT -GivenName $csv_line.NAME -SurName $csv_line.SECOND `
-DisplayName $name_full -AccountPassword $passwd `
-Enabled $true `
-CanNotChangePassword $false `
-ChangePasswordAtLogon $true `
-Title $csv_line.POSITION `
-Department $csv_line.DEPARTAMENT `
-Office $csv_line.ROOM `
-OfficePhone $csv_line.WORK_PHONE `
-MobilePhone $csv_line.MOBILE `
-Description $discr `
-Company ("табельный №"+[String]$csv_line.ID)

################### Конец создания пользователя ##############


######################## Блок создания групп ###############################
#
# Создаем группы и добавляем в них юзера. Столбцов групп - 3.
# Если надо больше групп - добавь столбец групп в файл,скопипасти модуль создания группы
# и укажи $sg=$csv_line.Security_group №
#
# проверяем, что бы поле группы было не пустое и что бы не равно "-"

# Security_group1
$sg=$csv_line.Security_group1
if (($sg) -and ($sg -ne '-')){

# проверка есть ли группа
try{
$tmp_1=Get-ADGroup -Identity ('cn=' + $sg + ',' +$gr_path)
}
catch{
# если нет - cоздаем группу
New-ADGroup -Name $sg `
-DisplayName $sg `
-SamAccountName $sg `
-GroupCategory Security `
-GroupScope Global `
-Path $gr_path
}

# добавляем юзера в группы
ADD-ADGroupMember -Identity $sg -Member $csv_line.ACCOUNT

}# конец if Security_group1

# Security_group2
$sg=$csv_line.Security_group2
if (($sg) -and ($sg2 -ne '-')){

# проверка есть ли группа
try{
$tmp_1=Get-ADGroup -Identity ('cn=' + $sg + ',' +$gr_path)
}
catch{

# если нет - cоздаем группу
New-ADGroup -Name $sg `
-DisplayName $sg `
-SamAccountName $sg `
-GroupCategory Security `
-GroupScope Global `
-Path $gr_path

}

# добавляем юзера в группы
ADD-ADGroupMember -Identity $sg -Member $csv_line.ACCOUNT

}# конец if Security_group2

# Security_group3
$sg=$csv_line.Security_group3
if (($sg) -and ($sg -ne '-')){

# проверка есть ли группа
try{
$tmp_1=Get-ADGroup -Identity ('cn=' + $sg + ',' +$gr_path)
}
catch{

# если нет - cоздаем группу
New-ADGroup -Name $sg `
-DisplayName $sg `
-SamAccountName $sg `
-GroupCategory Security `
-GroupScope Global `
-Path $gr_path

}

# добавляем юзера в группы
ADD-ADGroupMember -Identity $sg -Member $csv_line.ACCOUNT

}# конец if Security_group3
############################## Конец блока добавления юзера в группы #####################

}# конец new_aduser ###########################



######################
# СТАРТ #
######################

# путь к csv, должен лежать в каталоге скрипта
$path_to_csv= [String]$pwd + [String]"\users-list.csv"

# для формирования UserPrincipalName требуется FQDN домена, получаем
$dom=Get-ADDomainController

# Создаем OU для групп
$gr_ou='groups'
$gr_path='ou='+$gr_ou + ',' + $dom.DefaultPartition
# проверить существует ли OU, если нет - создаем
try{
$tmp_1=Get-ADOrganizationalUnit -Identity $gr_path
}
catch{
New-ADOrganizationalUnit -Name $gr_ou -ProtectedFromAccidentalDeletion $false
}


# читаем csv
$cvs_file=Import-CSV $path_to_csv

# и передаем каждую строку csv файла в функцию
$cvs_file | ForEach-Object {new_aduser $_}

Понадобилось сделать структуру OU не плоской, т.е. вида

Фирма
-------Отдел1
------Отдел2
------Отдел3
Филиал1
------Отдел1
------Отдел2
------Отдел3

Попробовал ввести новое поле OUF и переменную $oufirm, чегото не получается, я не силен в скриптовании, подскажите как переделать скрипт.

переменные попытался сделать такими
# формируем путь к OU
$oufirm=$csv_line.OUF
$ou=$csv_line.OU
$ou_path= 'ou=' + $oufirm + ',' + $ou +','+ $dom.DefaultPartition
$ou_path2= 'ou=' + $oufirm + ',' + $dom.DefaultPartition

создание OU

# проверить существует ли OU, если нет - создаем
try{
$tmp_1=Get-ADOrganizationalUnit -Identity $ou_path
}
catch{
New-ADOrganizationalUnit -Name $ou -ProtectedFromAccidentalDeletion $false -Path $ou_path2
}

Запутался, вобщем.

Kazun
12-04-2014, 19:10
Предположим,что OUF - "ОтделX,Филиал" или "Менеджеры,Отдел1,Филиал1" - в структуре AD "Ou=Менеджеры,Ou=Отдел1,Ou=Филиал1,DC=Contoso,DC=Com"

$oufirm = $csv_line.OUF.split(",")
[array]::reverse($oufirm)
$ou_path = $dom.DefaultPartition
$oufirm | Foreach {
$ou_name = $_
$ou_parent = $ou_path
$ou_path = "OU=" + $ou_name + "," + $ou_path
try{
$tmp_1 = Get-ADOrganizationalUnit -Identity $ou_path
}
catch{
New-ADOrganizationalUnit -Name $ou_name -ProtectedFromAccidentalDeletion $false -Path $ou_parent
}
}

volk1234
12-04-2014, 22:48
Эмм, не совсем так.
Я чтобы не менять глобально скрипт, решил просто сделать 2 поля ou и ouf.
Ou остается подразделение,
Ouf фирма/филиал.
Плюс я так понимаю и добавление пользователя тоже придется переделать, там указывается в какой ou добавлять

Kazun
12-04-2014, 23:09
Ничего глобально не надо менять. Вместо ou и ouf,оставить ou куда добавляется пользователь, но указать полный путь,для примера "Отдел,Филиал".

New-ADUser -Path $ou_path - как раз будет содержать путь до OU в формате (OU=Отдел,OU=Филиал,DC=Contoso,DC=Com)




© OSzone.net 2001-2012