Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Добавление пользователей в AD в нужную OU

Ответить
Настройки темы
PowerShell - [решено] Добавление пользователей в AD в нужную OU

Аватара для volk1234

Старовер


Сообщения: 1708
Благодарности: 314


Конфигурация

Профиль | Отправить PM | Цитировать


Привет!

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

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

-------

Ю-ху!


Отправлено: 13:55, 12-04-2014

 

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Предположим,что 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
	}
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:10, 12-04-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для volk1234

Старовер


Сообщения: 1708
Благодарности: 314

Профиль | Отправить PM | Цитировать


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

Отправлено: 22:48, 12-04-2014 | #3


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 23:09, 12-04-2014 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Добавление пользователей в AD в нужную OU

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - VBS: проверка существует ли OU в AD Chugun Скриптовые языки администрирования Windows 9 12-04-2013 15:20
2008 R2 - [решено] Путь в AD к OU предприятия FASTCHIP Windows Server 2008/2008 R2 4 01-07-2011 22:35
Массовое изменение настроек пользователей в OU WildCat Microsoft Windows NT/2000/2003 30 09-06-2010 11:20
VBS/WSH/JS - Массовое создание пользователей, компьютеров, OU и групп. Anton04 Скриптовые языки администрирования Windows 12 30-07-2009 00:53
Не получается ввести принтер в нужную OU... Ferum01 Microsoft Windows NT/2000/2003 4 09-10-2007 11:04




 
Переход