Как импортировать пользователей в Active Directory с помощью CSV
Когда вам нужно массово добавить новых пользователей в вашу Active Directory, самым простым способом является их импорт. Для этого мы можем использовать файл CSV и импортировать пользователей в нашу Active Directory с помощью PowerShell.
Преимущество использования файла CSV для импорта пользователей AD заключается в том, что вы можете быстро заполнить необходимые поля (или позволить отделу кадров заполнить данные) и легко создать новые учетные записи пользователей.
В этой статье я покажу вам, как импортировать пользователей в ваш Active Directory из CSV-файла, а в конце статьи у меня есть для вас полный скрипт.
Импортировать пользователей AD из CSV
Самый простой способ импортировать пользователей в Active Directory - это взять файл CSV, в котором вы установили все заголовки, точно соответствующие свойствам cmdlet New-ADUser, и использовать cmdlet Import-CSV и New-ADUser.
Чтобы создать CSV-файл с правильными заголовками, я рекомендую вам экспортировать некоторых из ваших текущих пользователей из вашей AD с необходимыми свойствами:
Get-Aduser -Filter * -SearchBase 'OU=Users,OU=Oslo,DC=a-d,DC=nl' -Properties DisplayName,EmailAddress,Title | Select Name,GivenName,SurName,DisplayName,Title,SamAccountName,UserPrincipalName,EmailAddress | Export-CSV "C:\users.csv"
Конечно, вы можете добавить больше свойств в экспорт, если хотите. Удалите существующие учетные записи пользователей из CSV-файла и добавьте в него ваших новых пользователей. Затем просто импортируйте CSV-файл и создайте новых пользователей:
Import-CSV c:\users.csv | New-ADUser -Enabled $True -Path 'OU=Users,OU=Oslo,DC=a-d,DC=nl' -AccountPassword (ConvertTo-SecureString 'Pass123!' -AsPlainText -force)Совет
Всегда тестируйте действия, прежде чем фактически создавать новых пользователей. Вы можете сделать это, добавив параметр -WhatIf после команды New-User.
Метод выше действительно базовый и, например, не будет проводить проверку на ошибки.
Создание скрипта импорта
Когда вы собираетесь массово создавать новые учетные записи пользователей, вам нужно учесть некоторые вещи. Например, вам как минимум нужно проверить, существует ли уже учетная запись пользователя в вашей Active Directory.
Но также, когда вы создаете пользователя, некоторые поля форматируются на основе имени пользователя. Например, адрес электронной почты, имя для входа и userprincipalname. Я предпочитаю форматировать их внутри скрипта PowerShell, чтобы обеспечить их согласованность.
Например, с помощью адреса электронной почты мы можем использовать следующую небольшую функцию PowerShell для форматирования адреса электронной почты пользователя:
Format the email address
$emailAddressFormat = $givenName + "." + $surName
Replace hyphens, apostrophe and whitespace, format to lowercase.
return $emailAddressFormat.Replace('-','').Replace(' ','').Replace("'",'').ToLower() + $domain
## Input: Mary-Ann O'Sullivan
## Result
maryann.osullivan@a-d.siteЕще одной распространенной проблемой, которая возникает при использовании CSV для импорта пользователей в Active Directory, являются пробелы в конце строк. Это может привести к проблемам с именем пользователя или адресом электронной почты, если вы их не обрежете.
Скрипт для импорта пользователей AD
Ниже вы найдете полный скрипт, который позволяет легко массово импортировать пользователей в ваш Active Directory. В скрипте мы сначала установим несколько значений по умолчанию:
- Путь – Это путь к OU, где новые пользователи должны быть сохранены
- Пароль — стандартный пароль для нового пользователя
- Включено – Новые учетные записи будут включены при создании
- Домен – Это домен, который используется для адреса электронной почты.
В скрипте вы также найдете пару функций. Эти функции, например, используются для создания samAccountName (который также является именем пользователя), рекомендуется ограничивать его до 20 символов, и функции для адреса электронной почты. Вы можете изменить их, конечно, на ваш предпочтительный формат.
Еще одна функция, которую вы найдете в скрипте, заключается в том, чтобы найти менеджера пользователя. Если вы предоставите имя менеджера в CSV-файле, скрипт найдет отличительное имя менеджера.
param(
[Parameter(
Mandatory = $false,
HelpMessage = "Enter the path to the CSV file"
)]
[string]$CSVpath
)
----
Default values
----
Default OU for new users
$path = 'OU=Users,OU=Oslo,OU=Sites,DC=a-d,DC=nl'
Default password for new users
$password = 'welcome@a-d2024'
Enable new accounts
$enabled = $true
Email domain (you can also use a column in the CSV file for this)
$domain = '@a-d.site'
function Get-SamAccountName{
PARAM(
[parameter(Mandatory=$true)]
[string]$givenName,
[parameter(Mandatory=$true)]
[string]$surName
)
# Create SamAccountName from given- and surname
return (($givenName.Substring(0,1)) + $surName).Replace('-','').Replace(' ','').Replace("'",'').ToLower()
}
function Get-EmailAddress{
PARAM(
[parameter(Mandatory=$true)]
[string]$givenName,
[parameter(Mandatory=$true)]
[string]$surName
)
# Format the email address
$emailAddressFormat = $givenName + "." + $surName
# Replace hyphens and whitespace, format to lowercase.
return $emailAddressFormat.Replace('-','').Replace(' ','').Replace("'",'').ToLower() + $domain
}
function Get-Manager{
PARAM(
[parameter(Mandatory=$true)]
[string]$name
)
# Get the manager
Get-AdUser -Filter {name -like $name} -Properties * | select -ExpandProperty DistinguishedName
}
Import CSV file and create users
ForEach ($user in (Import-Csv -Path $CSVpath)) {
# Create the samAccountName and userPrincipalName
$samAccountName = Get-SamAccountName -givenName $user.givenName -surName $user.surName
$userPrincipalName = $samAccountName + $domain
# Set Display Name
$displayName = $user.givenName.Trim() + " " + $user.surName.Trim()
# Make sure that user doesn't already exists
if ((Get-ADUser -Filter {UserPrincipalName -eq $userPrincipalName} -ErrorAction SilentlyContinue)) {
Write-Host "User $($displayName) already exists" -ForegroundColor Yellow
continue
}
# Get Email address
$emailAddress = Get-EmailAddress -givenName $user.givenName -surName $user.surName
# Create all the user properties
$newUser = @{
AccountPassWord = (ConvertTo-SecureString -AsPlainText $password -force)
ChangePasswordAtLogon = $true
City = $user.city
Company = $user.company
Country = $user.country
Department = $user.department
Description = $user.description
DisplayName = $displayName
EmailAddress = $emailAddress
Enabled = $enabled
GivenName = $user.givenName.Trim()
Manager = if ($user.manager) {Get-Manager -name $user.manager} else {$null}
Mobile = $user.mobile
Name = $displayName
Office = $user.office
OfficePhone = $user.phone
Organization = $user.organization
Path = $path
PostalCode = $user.postalcode
SamAccountName = $samAccountName
StreetAddress = $user.streetAddress
Surname = $user.surname.Trim()
Title = $user.title
UserPrincipalName = $userPrincipalName
}
# Create new user
try {
New-ADUser @newUser
Write-Host "- $displayName account is created" -ForegroundColor Green
}
catch {
Write-Host "Unable to create new account for $displayName" -ForegroundColor red
Write-Host "Error - $($_.Exception.Message)" -ForegroundColor red
}
}
Чтобы использовать сценарий, вы можете использовать этот файл Excel в качестве шаблона или создать его, используя метод, описанный ранее. Убедитесь, что вы ввели значения по умолчанию для вашей среды и запустили сценарий:
Import-ADUsers.ps1 -CSVpath c:\temp\users.csvХорошим вариантом перед импортом пользователей является проверка результатов перед фактическим созданием пользователей. Вы можете сделать это, добавив параметр -WhatIf после команды New-ADUser на строке 127.
Я также создал более продвинутый скрипт PowerShell, который вы можете использовать для создания одного пользователя. Этот скрипт имеет немного больше проверок на ошибки и также отправит сведения о новом аккаунте менеджеру, например.
Заключение
Когда вам нужно массово создать новых пользователей AD, самым простым методом является импорт пользователей AD из файла CSV. Вы можете использовать файл CSV с точно такими же заголовками и заполнить все в Excel, включая SamAccountName, путь OU и адрес электронной почты.
Но другой вариант - это автоматически отформатировать их с помощью PowerShell. Преимуществом последнего является то, что вы можете включить проверку ошибок, одновременно гарантируя, что все форматирование будет согласованным.
Я надеюсь, что эта статья помогла вам с импортом пользователей AD. Если у вас есть какие-либо вопросы, просто оставьте комментарий ниже.
