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