В этой статье мы рассмотрим, как создать (добавить) нового пользователей в домен Active Directory. Вы можете создать учетные записи пользователей в Active Directory с помощью графических mmc оснасток Active Directory Users and Computers (
dsa.msc
)/ AD Administrative Center (
dsac.msc
) или с помощью скриптов PowerShell.
Как создать нового пользователя в домене Active Directory?
Самый простой способ создания нового доменного пользователе в Active Directory – воспользоваться графической mmc консоль ADUC.
- Запустите консоль Active Directory Users and Computers, выполнив команду
dsa.msc
; - Выберите контейнер (Organizational Unit, OU) Active Directory, в котором вы хотите создать нового пользователя. Щелкните по нему правой кнопкой и выберите New -> User; Для создания пользователей в домене ваша учетная запись должна состоять в группе администраторов домена, Account Operators или вы можете делегировать права на создание пользователей другим пользователям/группам.
- Укажите имя, фамилию и инициалы пользователя, выберите его userPrincipalName (имя входа пользователя) и sAMAccountName, нажмите Next;
- Затем задайте пароль пользователя. На этой форме вы можете дополнительно включить для пользователя следующие опции атрибута UserAccountControl:
User must change password at next logon — пользователь при первом входе должен будет изменить пароль;
User cannot change password — пользователь не сможет самостоятельно изменить свой пароль (смена/сброс пароля может быть выполнена только администратором);
Password never expires — срок действия пароля пользователя никогда не истечет (если эта опция не включена, тогда срок действия пароля пользователя определяется политикой паролей Active Directory);
Account is disabled — учетная запись пользователя в домене отключена и не может использоваться для входа. - Найдите пользователя в консоли ADUC и откройте его свойства. Здесь вы можете задать дополнительные атрибуты пользователя: номер телефон, адрес, описание, должность, компанию (и т.д.), добавить его в группы AD, и изменить другие атрибуты на вкладке Attribute Editor.
Вы можете создавать новых пользователей с аналогичными параметрами с помощью копирования. Такой способ создания новых пользователей подходит, когда вы хотите создать еще одного пользователя из одного подразделения, с тем же набором прав, адресом и описанием.
Щелкните по пользователю и выберите Copy. При копировании пользователя ему будет скопирован список групп, адрес (кроме улицы), настройки атрибута useraccountcontrol, параметры организации и ряд других атрибутов.
New-ADUser: создать учетную запись пользователя с помощью PowerShell
Выше мы показали, как вручную создать пользователя в домене AD с помощью графической консоли ADUC. Если вы постоянно создаете в домене новых пользователей, то гораздо удобнее автоматизировать этот процесс с помощью PowerShell.
Для создания учетных записей пользователей в AD можно использовать командлет New-ADUser из модуля Active Directory Module for Windows PowerShell.
Полный синтаксис командлета New-ADUser можно получить с помощью команды:
Get-Command New-ADUser –Syntax
В минимальной версии для создания новой учетной записи пользователя в AD достаточно указать только его имя:
New-ADUser testuser1
Как вы видите, новая учетная запись пользователя была создана в контейнере Users. По умолчанию этот пользователь отключен. Чтобы использовать эту учетную запись, ее нужно включить (командлет Enable-ADAccount), задать пароль (командлет Set-ADAccountPassword) и настроить другие атрибуты (по необходимости).
Чтобы создать новую учетную запись в определенном контейнере (OU) домена с паролем и сразу включить ее, воспользуйтесь такой командой:
New-ADUser -Name "Test User2" -GivenName "Test" -Surname "User2" -SamAccountName "testuser2" -UserPrincipalName "[email protected]" -Path "OU=Users,OU=Accounts,OU=SPB,DC=winitpro,DC=loc" -AccountPassword(Read-Host -AsSecureString "Input Password") -Enabled $true
Команда предложит сразу указать пароль нового пользователя (пароль передается в защищенном виде).
Вы можете получить информацию о созданном пользователе домена с помощью командлета Get-ADUser:
Get-ADUser testuser2
PowerShell: Массовое создание новых пользователей в AD по CSV файлу
Вы можете использовать PowerShell скрипты для массового заведения пользователей в домене Active Directory. Рассмотрим несколько простой скрипт для создания учетных записей пользователей по списку из CSV файла.
Заполните необходимые параметры пользователей в формате CSV (Excel) файла. Например, мой Excel файл с пользователями состоит из 9 колонок и имеет следующий формат шапки:
FirstName;LastName;Initials;SamAccountName;Phone;Department;JobTitle;Password;OU
Заполните данные пользователей и сохраните Exсel файл с в формате CSV c запятыми, в качестве разделителей. Кодировка файла должна быть обязательно UTF-8 (важно!).
Теперь вы можете импортировать данный CSV файл (new_ad_users2.csv) и создать в домене новых пользователей. Код готового PowerShell скрипта представлен ниже:
- Имя OU, в котором нужно создать пользователя указывается в формате distinguishedName (
"OU=Users,OU=SPB,OU=RU,DC=winitpro,DC=ru"
). Значение нужно взят в двойные кавычки (т.к. строка содежрит запятые); - Имя пользователя в домене мы будем заводить на английском языке. Для транслитерации имен и фамилий пользователей с кириллицы в латиницу мы добавили в скрипт отдельную функцию Translit;
- Если в качестве разделителя CSV файла используется “;”, в командлет Import-Csv нужно добавить аргумент
-delimiter ";"
. Проверьте, какой разделитель (делиметер) используется в вашей Windows по-умолчанию (команда(Get-Culture).TextInfo.ListSeparator)
. Если системный разделитель отличается от разделителя в CSV файле, его нужно указать в параметре–Delimiter
; - Скрипт проверяет, существует ли пользователь в домене. Если в домене уже есть такая учетная запись, появляется предупреждение и предлагается ввести уникальный sAMAccountName (вы можете добавить порядковый номер в конце имени учетной записи).
$domain=“@winitpro.loc”
Import-Module activedirectory
Import-Csv "C:\ps\new_ad_users2.csv" | ForEach-Object {
$userSAM=$_.SamAccountName
if (@(Get-ADUser -Filter "SamAccountName -eq '$($_.SamAccountName)'").Count -ne 0) {
Add-Type -AssemblyName Microsoft.VisualBasic
$userSAM = [Microsoft.VisualBasic.Interaction]::InputBox("Пользователь с именем $_.SamAccountName уже существует", 'Укажите новое имя пользователя', $_.SamAccountName)
}
$upn = $userSAM + $domain
$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 $userSAM `
-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
}
После выполнения скрипта, откройте консоль ADUC, разверните указанный контейнер и убедитесь, что в AD появились новые учетки пользователей (отследить создание учетных записей в AD можно так: Получение списка учетных записей AD, созданных за последние 24 часа.)
Вы сразу можете добавить учетные записи в нужные группы AD с помощью командлета Add-AdGroupMember. Для этого нужно немного модифицировать скрипт, добавив в цикле строку:
Add-AdGroupMember -Identity AllowPublicInet -Members $userSAM
Также вы можете установить фотографию пользователя в AD, чтобы она отображалась в Outlook и Lync:
Set-ADUser $userSAM -Replace @{thumbnailPhoto=([byte[]](Get-Content "C:\ps\user1_photo.jpg" -Encoding byte))}
Спасибо за статью, очень полезная информация.
Вот только не увидел, если пользователь с такой фамилией уже существует, что скрипт сделает в этом случае?
Если учетка уже есть, скрипт возвращает ошибку. По хорошему нужно добавить пару строк, проверки существования учетной записи в AD и если такая учетка уже есть, добавлять к имени учетки индекс 2, 3, 4 (например, aaivanov2, aaivanov3 и т.д.). Так вы обеспечите уникальность учетных записей в Active Directory.
Аккаунты с индексами не совсем гуд :). Лучше добавлять к учетке первый символ имени.
По моему индексы вполне нормальное решение. У меня в домене более 10000 учеток. Тёсок очень много. В этом случае цифровые индексы у аккаунтов — единственное удобноее решение. Ну и пусть, что aaivanov10 🙂
В этом случае может возникнуть путаница). У нас правда не 10 тыс. учеток :).
Но я принцип понял).
при создании пользака есть галочка заводить почту\не заводить, как ее в скрипт втулить? какие колонки добавить для графы «описание» и графы «комната»?? спс
Расскажите, чем вы вы завожите учетки пользователям? Насколько я помню возможность сразу создать учетку и ящик была в спец консоли ADUC в Exchange 2003.
Описание — поле в AD «description», комната — roomNumber
Здравствуйте, выдает такую ошибку:
Translit : Имя «Translit» не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьт
е правильность написания имени, а также наличие и правильность пути, после чего повторите попытку.
строка:5 знак:16
+ $transLastName=Translit($_.LastName)
+ ~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Translit:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Какая версия PowerShell и Windows? Думаю что < 4.0.
Возможно в коде нужно поднять объявление функции Translit раньше ее вызова….
К сожалению, разрабы PS не удосужились добавить параметр поля «Remote Desktop Profile Path», так что полноценно New-ADUser невозможо использовать, приходится городить порно с adsi
Да, действительно, объектная модель модуля AD POsh не поддерживает прямое редактирование атрибута terminalservicesprofilepath через new-aduser или set-aduser.
Почему так, не знаю.
Народ действительно пользуется adsi
$users = Get-ADUser -Filter {(Enabled -eq $true)} -server $DC[1] -Properties * -SearchBase "OU=Users,DC=,DC=" | Select-Object SAMAccountName,DisplayName,DistinguishedName,Mail,Homemdb,@{Name="TSP";Expression={([adsi]("LDAP://$($users.distinguishedName)")).psbase.InvokeGet("terminalservicesprofilepath")}\\")
$nullTSP = Where-Object {$_.TSP -eq $null}
foreach ($TSP in $nullTSP) {
$TSP.DistinguisedName.psbase.Invokeset("terminalservicesprofilepath","\\
$TSP.DistinguishedName.setinfo()
}
Не заводится скрипт..
New-ADUser : Имя объекта имеет недопустимый синтаксис
строка:11 знак:1
+ New-ADUser -Name $transuname `
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (CN=Ponomarev K...Staff/OU=DTRII"
:String) [New-ADUser], ADException
+ FullyQualifiedErrorId : ActiveDirectoryServer:8335,Microsoft.ActiveDirec
tory.Management.Commands.NewADUser
Что-то не так в синтаксисе вашего скрипта или в csv файле (чаще всего проблемы с кодировкой, специсимволами и пробелами в именах).
Помогите пожалуйста разобраться….выходит такая же ошибка
Import-Module activedirectory
Import-Csv -path «C:\ad.csv» -Delimiter «;»| ForEach-Object {
$upn = $_.SamAccountName + “@house.local”
Get-Content C:\ad.csv | ConvertFrom-Csv -Delimiter «;»
$uname = $_.LastName + » » + $_.FirstName + » » + $_.DisplayName
#переводим в транслит фамилию, имя и отчество
$transLastName=Translit($_.LastName)
$transFirstName=Translit($_.FirstName)
$transDisplayName=Translit($_.DisplayName)
$transuname = $transLastName + » » + $transFirstName + » » + $transDisplayName
New-ADUser -Name $transuname `
-DisplayName $uname `
-GivenName $_.FirstName `
-Surname $_.LastName `
-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
}
Подскажите, я создал файл с русскими символами но когда загружаю получаю кодировку по типу 30 ���� можно как то указать кодировку для аплета?
Скорее всего вам просто нужно переконвертировать файл в кодировку UTF8
Добрый день!
Случайно не знаете, каким образом можно добавить что-либо в поле «Заметки», которая находится во вкладке «Телефоны»?
Нужно ввести туда инфу вида 01.01.1993, битрикс из этого поля вытягивает дату рождения сотрудника.
Вроде бы все поля нужные подобрал для себя, но это не могу найти…
Решил так.
Set-ADuser -identity ryboff -Add @{‘info’=$birthday}
Уже лет 7 учетки создают кадровики. Мы подружили АД и ЗУП. Кадровик только галочку ставит «нужен компьютер» сразу и почта и нужные группы добавляются. Юзеру распечатывается инструкция и он меняет пароль при первом входе. Остальное все по заявкам. Минус: структура в АД должна быть зеркалом в структуре ЗУП. Иногда не удобно политики назначать на такую структуру
Здравствуйте, 1с переписывался под это или это можно сделать уже имеющимися настройками?
А если нужно создать контакт(почтовый), а Exchnge не установлен. Как это сделать через PS
New-ADObject -name Alex -Type Contact -path "OU=Contacts,DC=winitpro,DC=ru" -OtherAttributes @{
'mail'="[email protected]";
'proxyAddresses'="[email protected]";
'givenName'="alex";
'sn'="alex";
'displayname'="alex ivanov"
}
всё отлично получилось, нет токовых статей по занесению пользователей, спасибо!!
Можете показать функцию с латиници на кирилицу ?
function Convert-LatinToCyrillic {
param (
[string]$text
)
$transliterationTable = @{
'a' = 'а'; 'b' = 'б'; 'v' = 'в'; 'g' = 'г'; 'd' = 'д'; 'e' = 'е'; 'yo' = 'ё'; 'zh' = 'ж';
'z' = 'з'; 'i' = 'и'; 'k' = 'к'; 'l' = 'л'; 'm' = 'м'; 'n' = 'н'; 'o' = 'о'; 'p' = 'п';
'r' = 'р'; 's' = 'с'; 't' = 'т'; 'u' = 'у'; 'f' = 'ф'; 'h' = 'х'; 'ts' = 'ц'; 'ch' = 'ч';
'sh' = 'ш'; 'sch' = 'щ'; 'yu' = 'ю'; 'ya' = 'я'
}
$text = $text.ToLower()
# заменяем более длинные фрагменты
foreach ($key in $transliterationTable.Keys | Sort-Object { $_.Length } -Descending) {
$text = $text -replace $key, $transliterationTable[$key]
}
$text = $text -replace 'y', 'й'
return $text
}
# Пример
$latinText = "Drevnee tulovische yuzhnogo mosta"
$cyrillicText = Convert-LatinToCyrillic -text $latinText
$cyrillicText
Спасибо большое за функцию!
В консоле ps, всё ok отрабатывает, а когда создаю сценарий(Convert-LatinToCyrillic.ps1) появляются ошибки(непредвиденная лексема, хэш-литерал указан не полностью и т.п.). Как это исправить ?
Подозреваю, что проблема с кодировкой PS1 файла. Проверьте, что это UTF8+BOM