О том, как массово заводить пользователей, я уже рассказывал в одной из предыдущих статей. С тех пор ничего особо не поменялось и описанные в ней способы по прежнему актуальны. Но все они предполагают либо заведение неактивных учеток, либо одинаковый пароль и, соответственно, необходимость его смены при первом входе. А иногда бывает необходимость завести учетные записи с уже готовым паролем.
Итак, есть список пользователей в Excel (ФИО, отдел, должность и т.п.). Этот список необходимо доработать, сгенерировать для каждого пользователя уникальный пароль, завести пользователей из списка в AD и передать список с паролями дальше.
В итоге получаем вот такой CSV-файл.
В данной ситуации описанный в предыдущей статье метод экспорта из CSV не сработает, поскольку пароль не является атрибутом пользователя и, соответственно, применен не будет. Придется использовать немного другой способ:
#Import required modules
Import-Module ActiveDirectory
#Prompt user for CSV file path
$filepath = "C:\Scripts\employees.csv";
#Import the file into a variable
$users = Import-Csv $filepath -Delimiter ";"
#Loop through each row and gather information
ForEach ($user in $users) {
$displayname = $user.DisplayName;
$name = $user.name;
$SurName = $user.Surname;
$GivenName = $user.GivenName;
$OUpath = "OU=Employees,DC=Test,DC=local";
$pass = $user.AccountPassword;
$securePassword = ConvertTo-SecureString $pass -AsPlainText -Force;
$SAM = $user.SAMAccountname;
$UPN = $user.UserprincipalName +"@test.local";
$Title = $user.Title;
$Department = $user.Department;
#Create user account
New-ADUser -Name $name -DisplayName $displayname -UserPrincipalName $UPN -SamAccountName $SAM -Surname $Surname -GivenName $GivenName `
-Title $Title -Department $Department -Path $OUpath -AccountPassword $securePassword -Enabled $true -Description $description;
}
Получилось довольно громоздко, зато мы не привязаны жестко к именам атрибутов и можем заносить в таблицу пароль пользователя. Остается только сохранить скрипт и запустить его, в результате получим пользователей с готовым паролем.
А теперь о том, что может пойти не так 🙂
Если в файле есть русские буквы, то при экспорте из Excel может слететь кодировка, в результате чего мы получим вот такую неприглядную картину.
Дабы избежать этого, надо экспортировать файл в формате UTF-8. Для этого при сохранении файла выбрать тип CSV UTF-8 (разделитель-запятая).
Вторая ошибка может случиться из за неверно указанного разделителя (Delimeter). Хотя при выгрузке в формате CSV в качестве разделителя должна использоваться запятая, но на практике это не всегда так. В итоге запустив импорт из CSV вместо структурированной информации мы получим кашу.
Дело в том, что по умолчанию Excel использует региональные настройки операционной системы. Вот у меня, к примеру, в качестве разделителя в настройках указаны точка с запятой. И даже если при сохранении в выбранном формате файла в качестве разделителя явно указана запятая, Excel упорно подставляет точку с запятой.
Исправить это можно, зайдя в меню Файл-Параметры-Дополнительно и в поле Системные разделители снять галку Использовать системные разделители. После этого можно вручную указать нужные разделители.
Так если нужно, чтобы в качестве разделителя была запятая, то указываем разделителем целой и дробной части запятую, а разделителем разрядов точку. Ели же нужно точку с запятой — то наоборот.
В принципе можем не заморачиваться с разделителем, поскольку его можно явно указать в команде импорта. Для примера немного изменим предыдущую команду, укажем в качестве разделителя точку с запятой:
Import-Csv C:\scripts\employees.csv -Delimiter ";"
Вот как то так.