New-ADUser — создание пользователей AD из PowerShell
Расширенные сценарии создания пользователей через
New-ADUser: одиночное создание со всеми атрибутами, массовый импорт из CSV с заполнением полей и генерацией логинов. Базовый простой вариант — в статье Массовое добавление пользователей из CSV.
Одиночный пользователь со всеми атрибутами
$pass = Read-Host -AsSecureString "Пароль"
New-ADUser -Name "Иванов Иван" `
-GivenName "Иван" -Surname "Иванов" `
-SamAccountName "i.ivanov" `
-UserPrincipalName "i.ivanov@ad.example.com" `
-Path "OU=Users,OU=Office,DC=ad,DC=example,DC=com" `
-AccountPassword $pass `
-Title "Инженер" -Department "ИТ" -Company "Ромашка" `
-OfficePhone "1234" -EmailAddress "i.ivanov@example.com" `
-ChangePasswordAtLogon $true -Enabled $true
Нестандартные атрибуты (нет отдельного параметра) — через -OtherAttributes:
New-ADUser ... -OtherAttributes @{extensionAttribute1 = "b24-1042"; info = "временный подряд"}
Массовый импорт из CSV с полными полями
CSV (UTF-8, разделитель ;):
FirstName;LastName;Title;Department;Phone;Password
Иван;Иванов;Инженер;ИТ;1234;Ces-7364!
Пётр;Петров;Бухгалтер;Финансы;1235;Ces-1187!
Скрипт с автогенерацией логина (транслитерация фамилии + первая буква имени):
$translit = @{ "а"="a";"б"="b";"в"="v";"г"="g";"д"="d";"е"="e";"ё"="e";"ж"="zh";"з"="z";
"и"="i";"й"="y";"к"="k";"л"="l";"м"="m";"н"="n";"о"="o";"п"="p";"р"="r";"с"="s";
"т"="t";"у"="u";"ф"="f";"х"="h";"ц"="c";"ч"="ch";"ш"="sh";"щ"="sch";"ъ"="";"ы"="y";
"ь"="";"э"="e";"ю"="yu";"я"="ya" }
function ConvertTo-Translit([string]$s) {
-join ($s.ToLower().ToCharArray() | ForEach-Object { if ($translit["$_"] -ne $null) { $translit["$_"] } else { $_ } })
}
$ou = "OU=Users,OU=Office,DC=ad,DC=example,DC=com"
$domain = "ad.example.com"
Import-Csv "C:\import\users.csv" -Delimiter ";" | ForEach-Object {
$login = (ConvertTo-Translit $_.FirstName).Substring(0,1) + "." + (ConvertTo-Translit $_.LastName)
New-ADUser -Name "$($_.LastName) $($_.FirstName)" `
-GivenName $_.FirstName -Surname $_.LastName `
-SamAccountName $login -UserPrincipalName "$login@$domain" `
-Title $_.Title -Department $_.Department -OfficePhone $_.Phone `
-Path $ou `
-AccountPassword (ConvertTo-SecureString $_.Password -AsPlainText -Force) `
-ChangePasswordAtLogon $true -Enabled $true
Write-Host "создан: $login"
}
Полезные дополнения
Сразу добавить в группы:
Add-ADPrincipalGroupMembership -Identity $login -MemberOf "vpn-users", "office-share-rw"
Проверить, что логин свободен, прежде чем создавать:
if (Get-ADUser -Filter "SamAccountName -eq '$login'") { Write-Warning "$login занят"; return }
Массовая выгрузка результата для сверки:
Get-ADUser -Filter * -SearchBase $ou -Properties Title,Department |
Select-Object SamAccountName, Name, Title, Department |
Export-Csv C:\import\created.csv -Delimiter ";" -Encoding UTF8 -NoTypeInformation