Добавить 'create-adusers-csv'

This commit is contained in:
Дмитрий Рамазанов 2020-09-24 10:23:41 +00:00
parent 3b2bd5b181
commit c309f1143f

255
create-adusers-csv Normal file
View File

@ -0,0 +1,255 @@
# Поля УЗ и описания
#
# Название и описание
# <Имя атрибута AD> | <Имя поля CSV> | [<Имя соответствующего параметра New-ADUser, Set-ADUser>]
#
# Имя - имя сотрудника
# givenName | FirstName | -GivenName
# Фамилия - фамилия сотрудника
# sn | LastName | -Surname
# Инициалы - первая буква отчества сотрудника
# initials | MiddleName[1] | -Initials
# Полное имя - Фамилия Имя Отчество сотрудника (именно в таком порядке)
# name | LastName + FirstName + MiddleName | -Name
# Выводимое имя - Фамилия Имя Отчество сотрудника (именно в таком порядке)
# displayName | LastName + FirstName + MiddleName | -DisplayName
# Комната - номер кабинета сотрудника
# physicalDeliveryOfficeName | Room |
# Номер телефона - внутренний номер телефона сотрудника
# telephoneNumber | IPPhone | -OfficePhone
# IP-телефон - городской номер телефона сотрудника в формате (код_города)ХХХХХХХ
# ipPhone | Phone |
# Факс (при наличии) - номер факса, если имеется факсимильный аппарат, в формате (код_города)ХХХХХХХ
# facsimileTelephoneNumber | Fax | -Fax
# Электронная почта - поле заполняется после подключения сотрудника к сервису электронной почты, осуществляемого только по заявке, вручную не заполняется
# mail | Mail | -EmailAddress
# Почтовый индекс
# postalCode | PostalCode | -PostalCode
# Регион
# st | Region | -State
# Адрес - обязательно заполнять для сотрудников территориальных подразделений
# streetAddress | StreetAddress | StreetAddress
# Должность - должность сотрудника
# title | Title | -Title
# Отдел (department) - структурное подразделение, к которому принадлежит сотрудник (Руководство, Управление, Отдел). Начальникам управлений писать сюда название управления; некоторые названия подразделений могут не входить, их следует однообразно для всех работников подразделения сокращать. Для новых работников - просто скопируйте у уже работающих
# department | DepartmentShort | -Department
# departmentNumber - структурное подразделение, к которому принадлежит сотрудник (Руководство, Управление, Отдел). Начальникам управлений писать сюда название управления; предназначено для ПОЛНОГО наименования подразделения. Именно оно отображается в заявках и записывается в журнале учета
# departmentNumber | Department |
# division - Управление, в котором работает сотрудник, если нет - ничего не пишем
# division | Division | -Division
# Описание - Группа, в которой работает сотрудник, если нет - ничего не пишем
# description | Group | -Description
# Руководитель - непосредственный руководитель сотрудника. Если сотрудник входит в группу внутри отдела - это руководитель группы. Для руководителя группы указывается начальник отдела. Для начальника отдела указывается начальник управления, если отдел входит в управление, или курирующий заместитель генерального директора; для заместителя генерального директора указывается генеральный директор
#
# Расположение - поле "l" - город нахождения сотрудника (Красноярск, Тюмень, Иркутск и т.д., без "г.")
# l | City | -City
# destinationIndicator - Может принимать значения: "Администрация", "Подразделения при администрации", "Обособленные подразделение"
# destinationIndicator | DivisionType |
Param(
[Parameter(Mandatory=$true,
HelpMessage="Domain name like 'example.com'")]
[ValidateNotNull()]
[String]$DomainName,
[Parameter(Mandatory=$true,
HelpMessage="OU like 'OU=Temp,OU=Users,OU=MyCompany,DC=example,DC=com'")]
[ValidateNotNull()]
[String]$OU,
[Parameter(Mandatory=$true,
HelpMessage="CSV file path'")]
[ValidateNotNull()]
[String]$CSVPath,
[Parameter(Mandatory=$false,
HelpMessage="Just print debug and exit")]
[Switch]$DryRun,
[Parameter(Mandatory=$false,
HelpMessage="Plain text password")]
[String]$Password
)
$CSVtempfile = "temp.csv"
$DefaultPassword = "1qaz2wsx#EDC"
#Функция транслитерации
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
}
Import-Module activedirectory
# Конвертация кодировки
Get-Content $CSVPath | Set-Content -Encoding UTF8 $CSVtempfile
# Импорт CSV
$Objects = Import-Csv -Delimiter ';' $CSVtempfile
# Обработка строк
foreach ($Object in $Objects) {
Write-Output ""
Write-Output "-----"
Write-Host -ForegroundColor DarkGreen "Запрошенный пользователь:"
Write-Output $Object
# Вычисляемые параметры
$FullName = $Object.LastName + " " + $Object.FirstName + " " + $Object.MiddleName
$DisplayName = $FullName
$Initials = $Object.MiddleName.Substring(0, 1)
$SamAccountName = $($(Translit($Object.FirstName)).Substring(0, 1).ToLower() + "." + $(Translit($Object.LastName)).ToLower())
$UPN = $SamAccountName + “@” + $DomainName.ToLower()
if ($Password -eq "") { $Password = $DefaultPassword }
#if ($Object.Manager -ne "") { $Manager = Get-ADUser -Filter {(cn -eq $Object.Manager)} } else { $Manager = "" }
# Проверка существующей УЗ по полному имени
$User = Get-ADUser -Filter {(cn -eq $FullName)} -Properties DistinguishedName
if ($User -ne $null) {
Write-Warning "Совпадение полного имени с существующей учетной записью:"
Write-Output $User
Write-Warning "Пропускаем."
continue
}
# Проверка совпадения логина
$User = Get-ADUser -Filter {(sAMAccountName -eq $SamAccountName)}
if ($User -ne $null) {
Write-Warning "Совпадение логина ($SamAccountName) с существующей учетной записью:"
Write-Output $User
Write-Warning "Пробуем второй вариант:"
$SamAccountName = $($(Translit($Object.FirstName)).Substring(0, 1).ToLower() + $(Translit($Object.MiddleName)).Substring(0, 1).ToLower() + "." + $(Translit($Object.LastName)).ToLower())
$User = Get-ADUser -Filter {(sAMAccountName -eq $SamAccountName)}
if ($User -ne $null) {
Write-Warning "Совпадение второго варианта логина ($SamAccountName) с существующей учетной записью:"
Write-Output $User
Write-Warning "Невозможно создать УЗ в автоматическом режиме. Пропускаем."
continue
}
}
Write-Output $($FullName + "|" + $SamAccountName + "|" + $UPN + "|" + $Password)
# Ничего не делаем, если DryRun
if ($DryRun) { continue }
# Создание учетной записи
New-ADUser `
-UserPrincipalName $UPN `
-SamAccountName $SamAccountName `
-Enabled $false `
-AccountPassword (ConvertTo-SecureString $Password -AsPlainText -force) `
-ChangePasswordAtLogon $true `
-Path $OU `
-Name $FullName `
-DisplayName $DisplayName `
-GivenName $($Object.FirstName + " " + $Object.MiddleName) `
-Surname $Object.LastName `
-Initials $Initials `
-Title $Object.Title `
-OfficePhone $Object.IPPhone `
-MobilePhone $Object.MobilePhone `
-Fax $Object.Fax `
-EmailAddress $Object.Mail `
-Country $Object.Country `
-PostalCode $Object.PostalCode `
-City $Object.City `
-StreetAddress $Object.StreetAddress `
-Company $Object.Company `
-Division $Object.Division `
-Department $Object.DepartmentShort `
-Description $Object.Group `
-Manager $Manager `
-OtherAttributes @{
ipPhone = $Object.Phone;
physicalDeliveryOfficeName = $Object.Room;
destinationIndicator = $Object.DivisionType;
departmentNumber = $Object.Department }
}
if ($DryRun) {
Write-Output ""
Write-Warning "Использован ключ DryRun, изменений не произведено."
}