Создание пользователей Active Directory через CSV файл

Дата: 30.12.2014 Автор Admin

Иногда бывает нужно создать в Active Directory кучу пользователей.

Создавать все это добро вручную долго и муторно, а если для каждой группы пользователей нужна своя OU? Или названия компаний для каждого свое?

Ниже я покажу скрипт, который создает пользователей из CSV файла.

Алгоритм следующий:

1) Создаем OU с названием компании пользователя

2) Создаем группы для пользователя и включаем его в них (мы создадим глобальную группу и универсальную)

3) Переводим названия созданных групп в AD в транслит

4) Добавляем пользователей в другие (общие) группы AD

Шапка CSV файла будет такой:

Lastname;Firstname;Login;Password;Position;Company;Number

Сам скрипт:

#Задаем переменные

$CSVpatch = "C:\PowerShell_Scripts5.csv"

$CSVcopy = "C:\PowerShell_Scripts502.csv"

$CSVwithADgroups = "C:\PowerShell_Scripts5ADG.csv"

$TMPcompany = "C:\PowerShell_Scripts\temp.txt"

$TMPListcompany = "C:\PowerShell_Scripts\TMPListcompany.txt"

$TMPListcompanyreplased = "C:\PowerShell_Scripts\TMPListcompanyreplased.txt"

$TMPcompanyTranslit = "C:\PowerShell_Scripts\translit.txt"

$TMPcompanyTranslitCSV = "C:\PowerShell_Scripts\translit.csv"

$TMPfile = "C:\PowerShell_Scripts\tmpfile.txt"

$AllinoneCSV = "C:\PowerShell_Scripts\allinonetranslit.csv"

# Создаем новый OU по названием компаний

Import-Csv $CSVpatch -Delimiter ";" | % {

$Company = $_.Company; # Set the user

NEW-ADOrganizationalUnit "$Company" –path "OU=Users,OU=Office365_Sync,DC=test,DC=local"
}

# Удаляем временные файлы

remove-item $CSVcopy

remove-item $CSVwithADgroups

remove-item $TMPcompany

remove-item $TMPListcompany

remove-item $TMPListcompanyreplased

remove-item $TMPcompanyTranslit

remove-item $TMPcompanyTranslitCSV

remove-item $AllinoneCSV

# Обрабатываем и преобразуем названия компаний (копируем столбец с компаниями и удаляем пробелы)

Import-Csv $CSVpatch -Delimiter ";" | % {

$Company = $_.Company; # Set the user

$Company >> $TMPcompany

}

$hash = @{} # define a new empty hash table

gc $TMPcompany | % {

if ($hash.$_ -eq $null) {

$_
};

$hash.$_ = 1

} > $TMPfile #$TMPListcompany

(Get-Content $TMPcompany) -replace " ","-" | Set-Content $TMPListcompanyreplased

# Преобразуем в транслит название компаний

remove-item $TMPcompanyTranslit

function global:Translit
{
param([string]$inString)
$Translit = @{
[char]'а' = "a"
[char]'А' = "A"
[char]'б' = "b"
[char]'Б' = "B"
[char]'в' = "v"
[char]'В' = "V"
[char]'г' = "g"
[char]'Г' = "G"
[char]'д' = "d"
[char]'Д' = "D"
[char]'е' = "e"
[char]'Е' = "E"
[char]'ё' = "yo"
[char]'Ё' = "Yo"
[char]'ж' = "zh"
[char]'Ж' = "Zh"
[char]'з' = "z"
[char]'З' = "Z"
[char]'и' = "i"
[char]'И' = "I"
[char]'й' = "j"
[char]'Й' = "J"
[char]'к' = "k"
[char]'К' = "K"
[char]'л' = "l"
[char]'Л' = "L"
[char]'м' = "m"
[char]'М' = "M"
[char]'н' = "n"
[char]'Н' = "N"
[char]'о' = "o"
[char]'О' = "O"
[char]'п' = "p"
[char]'П' = "P"
[char]'р' = "r"
[char]'Р' = "R"
[char]'с' = "s"
[char]'С' = "S"
[char]'т' = "t"
[char]'Т' = "T"
[char]'у' = "u"
[char]'У' = "U"
[char]'ф' = "f"
[char]'Ф' = "F"
[char]'х' = "h"
[char]'Х' = "H"
[char]'ц' = "c"
[char]'Ц' = "C"
[char]'ч' = "ch"
[char]'Ч' = "Ch"
[char]'ш' = "sh"
[char]'Ш' = "Sh"
[char]'щ' = "sch"
[char]'Щ' = "Sch"
[char]'ъ' = ""
[char]'Ъ' = ""
[char]'ы' = "y"
[char]'Ы' = "Y"
[char]'ь' = ""
[char]'Ь' = ""
[char]'э' = "e"
[char]'Э' = "E"
[char]'ю' = "yu"
[char]'Ю' = "Yu"
[char]'я' = "ya"
[char]'Я' = "Ya"
}
$outCHR=""
foreach ($CHR in $inCHR = $inString.ToCharArray())
{
if ($Translit[$CHR] -cne $Null )
{$outCHR += $Translit[$CHR]}
else
{$outCHR += $CHR}
}
Write-Output $outCHR
}

Get-Content $TMPListcompanyreplased | ForEach-Object {Translit($_)} > $TMPcompanyTranslit

##Создаем группы в AD

Copy-Item $CSVpatch $CSVcopy

function Insert-Content {
param ( [String]$Path )
process {
$( ,$_; Get-Content $Path -ea SilentlyContinue) | Out-File $Path
}
}

'ADgroup' | Insert-Content $TMPcompanyTranslit

import-csv $TMPcompanyTranslit -delimiter ';' | export-csv -NoTypeInformation -UseCulture $TMPcompanyTranslitCSV

(Get-Content $TMPcompanyTranslitCSV) -replace '"' | Set-Content $TMPcompanyTranslitCSV

$csv1 = @(gc $CSVcopy)
$csv2 = @(gc $TMPcompanyTranslitCSV)
$csv3 = @()
for ($i=0; $i -lt $csv1.Count; $i++) {
$csv3 += $csv1[$i] + ';' + $csv2[$i]
}

$csv3 | Out-File $AllinoneCSV

Import-Csv $AllinoneCSV -Delimiter ";"| % {

$Company = $_.Company; # Set the user
$OU = "OU=$Company,OU=test,OU=Office365_Sync,DC=test,DC=local"

$ADgroup = $_.ADgroup; # Set the user

#echo $OU

#echo $ADgroup
}

clear

Import-Csv $AllinoneCSV -Delimiter ";"| % {

$Firstname = $_.Firstname; # Set the user
$Lastname = $_.Lastname; # Set the user
$Login = $_.Login; # Set the user
$Password = $_.Password; # Set the user
$Position = $_.Position; # Set the user
$Company = $_.Company; # Set the user
$Number = $_.Number; # Set the user
$OU = "OU=$Company,OU=test,OU=Office365_Sync,DC=test,DC=local"
$ADgroup = $_.ADgroup; # Set the user

echo $ADgroup
$Displayname = "$Lastname $Firstname"

New-ADUser -SamAccountName "$Login" -name "$Displayname" -GivenName "$Firstname" -Surname "$Lastname" -PasswordNeverExpires $true -UserPrincipalName "$Login@domain.ru" -DisplayName "$Displayname" -EmailAddress "$Login@domain.ru" -Title "$Position" -enable $True -AccountPassword (ConvertTo-SecureString -AsPlainText "$Password" -Force) -Path "$OU" -company "$Company" -OtherAttributes @{'preferredLanguage'="RU"}

New-ADGroup -SamAccountName "GD-$ADgroup" -name "GD-$ADgroup" -GroupScope 1 -GroupCategory security -description "$Company" -OtherAttributes @{'info'="domain.ru"} -Path "$OU"

Set-ADGroup "GD-$ADgroup" -Replace @{mail="GD-$ADgroup@domain.ru"}

New-ADGroup -SamAccountName "$ADgroup" -name "$ADgroup" -GroupScope 2 -GroupCategory distribution -description "$ADgroup"-OtherAttributes @{'mail'="$ADgroup@domain.ru"} -Path "$OU"

}

Start-Sleep -Seconds 20

clear

Import-Csv $AllinoneCSV -Delimiter ";"| % {
$Company = $_.Company; # Set the user
$OU = "OU=$Company,OU=test,OU=Office365_Sync,DC=test,DC=local"

$OU

$users = Get-ADUser -Filter * -SearchBase "$OU"
#$users

$groups1 = Get-ADGroup -Filter * -SearchBase "$OU" | Where-Object {$_.SamAccountName -notlike "GD-*"}
$groups2 = Get-ADGroup -Filter * -SearchBase "$OU" | Where-Object {$_.SamAccountName -like "GD-*"}

Add-ADGroupMember "$groups1" -Member $users
Add-ADGroupMember "$groups2" -Member $users

Add-ADGroupMember "GD-TS-Users-Termsrv05-Region" -Member $users

Add-ADGroupMember "GD-All-test-Users" -Member $users

}

remove-item $CSVcopy

remove-item $CSVwithADgroups

remove-item $TMPcompany

remove-item $TMPListcompany

remove-item $TMPListcompanyreplased

remove-item $TMPcompanyTranslit

remove-item $TMPcompanyTranslitCSV

remove-item $AllinoneCSV

remove-item $TMPfile

Если вам нужно просто создать много учетных записей в Active Directory, то вам подойдет следующий скрипт:

#Задаем переменные

$CSVpatch = "C:\PowerShell_Scripts5.csv"


Import-Csv $CSVpatch -Delimiter ";" | % {


$Firstname = $_.Firstname; # Set the user
$Lastname = $_.Lastname; # Set the user
$Login = $_.Login; # Set the user
$Password = $_.Password; # Set the user
$Position = $_.Position; # Set the user
$Company = $_.Company; # Set the user
$Number = $_.Number; # Set the user

$Displayname = "$Lastname $Firstname"

New-ADUser -SamAccountName "$Login" -name "$Displayname" -GivenName "$Firstname" -Surname "$Lastname" -PasswordNeverExpires $true -UserPrincipalName "$Login@domain.local" -DisplayName "$Displayname" -EmailAddress "$Login@domain.ru" -Title "$Position" -enable $True -AccountPassword (ConvertTo-SecureString -AsPlainText "$Password" -Force) -company "$Company"

}

 


Комментарии

Алексей

Советую воспользоваться утилитой «Active Directory Bulk Operations». Программа позволяет пакетно создавать и редактировать учетные записи пользователей, а так же копировать учетные записи с сохранением членства в группах и полной иерархией организационных единиц в другой домен! Скачать можно тут: http://www.sysadminsoft.ru/active-directory-bulk-operations

    Admin

    Спасибо за информацию, не знал о такой утилите, так все через powershell и оснастки обычно делаю)

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

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