Простой скрипт, или командлет для создания единичных доменных учетных записей пользователей через Powershell я вам показал в одной из прошлых статей.
Но что делать в том случае, если в Active Directory нужно создать сразу 30, 50, 500 учетных записей пользователей?! — Самый удобный вариант для таких случаев это создать и сохранить список пользователей в формате CSV (Excel) файла, а затем запустить специальный PowerShell скрипт.
Это я вам сейчас и продемонстрирую в рамках данной статьи. Погнали!
Открываем наш любимый Excel, и создаем файл в формате CSV.
В данном файле нужно заполнить все значимые для вас атрибуты пользователей.
В этой статье для примера, я буду использовать Excel файл состоящий из 9 колонок и имеющий следующий формат шапки таблицы:
1. FirstName
2. LastName
3. Initials
4. SamAccountName
5. Phone
6. Department
7. JobTitle
8. Password
9. OU
Нужно заполнить данные пользователей и сохранить файл Excel в формате CSV c запятыми в качестве разделителей.
Кодировка файла при сохранении должна быть строго UTF-8 и никакая другая (иначе скрипт не будет работать)! Кроме того, в значениях столбца OU есть запятые, их нужно взять в двойные кавычки, чтобы все правильно отработало.
Теперь можно импортировать данный CSV-файл (например, new_users_adds.csv) и создать в домене новых пользователей.
Имена пользователей в домене будем заводить на английской языке, из-за того, что мы делаем транслитерацию с кириллицы в латиницу мы добавим в наш скрипт отдельную функцию транслитерации — Translit.
Так же отмечу — если в качестве разделителя CSV файла используется “;”, в командлет Import-Csv нужно добавить аргумент -delimiter «;»
А вот и сам код Powershell-cкрипта для массового создания пользователей из CSV-файла в домене Active Directory:
Import-Module activedirectory Import-Csv "C:psnew_users_adds.csv" | ForEach-Object { $upn = $_.SamAccountName + “@contoso.loc” $uname = $_.LastName + " " + $_.FirstName + " " + $_.Initials #переводим в транслит фамилию, имя, отчество $transLastName=Translit($_.LastName) $transFirstName=Translit($_.FirstName) $transInitials=Translit($_.Initials) $transuname = $transLastName + " " + $transFirstName + " " + $transInitials New-ADUser -Name $transuname ` -DisplayName $uname ` -GivenName $_.FirstName ` -Surname $_.LastName ` -Initials $_.Initials ` -OfficePhone $_.Phone ` -Department $_.Department ` -Title $_.JobTitle ` -UserPrincipalName $upn ` -SamAccountName $_.samAccountName ` -Path $_.OU ` -AccountPassword (ConvertTo-SecureString $_.Password -AsPlainText -force) -Enabled $true } #начало функции транслита символов 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 }
После выполнения скрипта, откройте консоль mmc с оснасткой Active Directory Users and Computers, разверните указанный контейнер и убедитесь, что в Acticve Directory появились свежесозданные учетные записи пользователей. На этом всё.
Подписывайтесь на обновления блога:
Наша Группа ВКонтакте
Что можно изменить, дабы можно было использовать Кириллицу в имени и фамилии?
Полагаю, csv сохранить необходимо будет в кодировке unicode…
Да, Антон, вы совершенно правы.
Скажите пожалуйста можно сделать чтобы из транскрипта фамилии и имени создавался SamAccountName?
Примену Иванов Алексей транслировался в aivanov
Назрел необходимость завести 150 студентов с логинами 101_01… 101_50. 110_01….110_50 и назначенными мною паролями в группу набор 2023, PS не пользовался, но понял, что надо просто сделать EXCEL файл и написать подобный скрипт, МОЖНО ПОЛНОСТЬЮ ПРИМЕР???
Спасибо