Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Добавление пользователей в AD в нужную OU (http://forum.oszone.net/showthread.php?t=280756)

volk1234 12-04-2014 13:55 2336735

Добавление пользователей в AD в нужную OU
 
Привет!

Есть скрипт, который отлично работает, берет из 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_MAIL,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 2336945

Предположим,что 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 2337066

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

Kazun 12-04-2014 23:09 2337076

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

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


Время: 21:53.

Время: 21:53.
© OSzone.net 2001-