Ну и теперь решил описать так, чтобы ЛЮБОМУ было понятно, кто хоть чуть-чуть видел powershell и знаком со скриптами.
Итак. Чтобы создать кучу юзеров с кучей параметров в Active Directory требуется (помимо Windows Server 2008 R2 SP1 \ PowerShell 2.0.1.1):
0. Разрешить выполнять скрипты в powershell - открыть powershell на контроллере домена и выполнить команд
Set-ExecutionPolicy UnrestrictedНе выполнив этой команды получим сообщение "выполнение скриптов запрещено для данной системы"
1. Загрузить в powershell модуль управления Active Directory. Выполняем команду
import-module activedirectory
2. Создаем в MS Excel файлик с параметрами пользователей. В верхней строке указано объяснение что это за параметр. Во второй строке указано имя параметра - это реальная команда-параметр для командлета new-aduser. Далее в каждом столбце указано значение какого-либо параметра, который будет присвоен объекту при создании. В принципе все эти параметры можно посмотреть по команде get-help new-aduser -full. Я выбрал нужные мне и задал их значения:
Кому не видно - вот перечень столбцов через запятую, которые по-моему обязательны.
Name,Password,Surname,GivenName,DisplayName,Description,Department,Title,Division,City,EmailAddress,ScriptPath,SamAccountName
Вообще можно заполнить все параметры учетки, имена параметров можно уивдеть в свойствах учетки, на вкладке Редактор атрибутов (если такой вкладки нет - включаем дполнитиельные возможности в свойствах консоли ММС)
При создании параметров нужно избегать точек, запятых и прочего мусора, который может быть воспринят как команда. Обязательным параметром следует сделать SamAccountName (спасибо комментирующему за поправку)
Сохраняем файлик с расширением XLS (XLSX - для 2007). А потом сохраняем с расширением CSV (разделители - точка с запятой). Открываем файлик с расширением CSV в блокноте и сохраняем в другой кодировке - Unicode (а по умолчанию идет ANSI, которую powershell не переваривает и при выполнении выдаст ошибку). Имя сохраняемого и путь (для упрощения понимания последующих шагов) - C:\scripts\createuserbat.csv. Открываем файлик в каком-нибудь файловом менеджере и заменяем ВСЕ точки с запятой (;) на просто запятые - (,). Сохраняем. Не должно быть лишних пробелов, точек и прочего хлама. Проверять нужно тщательно.
3. Открываем блокнот и вставляем туда вот этот код:
Import-CSV -Path "C:\scripts\createuserbat.csv" | ForEach-Object -process {New-ADuser -Name $_.Name -Surname $_.Surname -City $_.City -Department $_.Department -GivenName $_.GivenName -Title $_.Title -Description $_.Description -DisplayName $_.DisplayName -Division $_.Division -EmailAddress $_.EmailAddress -MobilePhone $_.MobilePhone -SamAccountName $_.SamAccountName -ScriptPath $_.ScriptPath -Path "ou=Users_Test,dc=Test,dc=ru" -CannotChangePassword $true -ChangePasswordAtLogon $false -PasswordNotRequired $true -AccountPassword (ConvertTo-SecureString -AsPlainText $_.Password -Force) -Company TEST}
Теперь подробнее. Разберем скрипт на куски:
Import-CSV -Path "C:\scripts\createuserbat.csv" - эта команда берет данные из файлика, котоый мы создали (и положили по указанному пути - в данном случае в C:\scripts\createuserbat.csv) и передает их...
| ForEach-Object -process - ... в конвейер указанной далее команды (т.е. указанная далее команда отработает для всех строк нашего createuserbat.csv)
{New-ADuser - команда уже знакомая и понятная - она создает пользователя с нужными атрибутами, которые перечисляются далее...
-Name $_.Name - это атрибут "Имя" (по сути логин пользователя). Т.е. мы говорим команде New-ADUser взять параметр Name из файлика createuserbat.csv из столбца Name (указывается псевдоним $_.Name).
Далее - все по аналогии. Обязательным параметром следует сделать SamAccountName
Нюансы - куда создается объект, его пароль и атрибуты, связанные с паролем. А также скрипт, выполняющийся при входе в систему.
Куда создается объект (пользователь)?
Это указывается параметром -Path "ou=Users_Test,dc=Test,dc=ru" из которого мы видим, что создаваться он будет в контейнере (OU) Users_Test домена Test.ru. Тут надо подставить свое значение конечно. Я бы советовал держать пользователей не в Users, как это бывает по умолчанию, а в другом OU. Это упростит потом работы с политиками. Посмотреть путь до контейнера можно в консоли MMC Пользователи и компьютеры со включенными дополнительными параметрами. Смотрим в редактор атрибутов, параметр distinguishedName.
Пароль и его атрибуты.
-CannotChangePassword $true - задаем параметр "Запретить смену пароля пользователем"
-ChangePasswordAtLogon $false - задаем параметр "Сменить пароль при следующем входе в систему" в значение НЕТ
-PasswordNotRequired $true - задаем параметр "Требуется ли пароль для учетной записи" в значение ДА
-AccountPassword (ConvertTo-SecureString -AsPlainText $_.Password -Force) - задаем собственно сам пароль, включая возможность это делать из простого текстового значения, снимая атрибуты секретности, и передавая в конвейер значение столбца Password в файлике createuserbat.csv
Эти три параметра рекомендую не менять - они зависят друг от друга (уже забыл как))) и надо просто их выполнить именно так)))
Скрипт, выполняющийся при входе в систему.
-ScriptPath $_.ScriptPath
В параметре прописано startuser.bat. Это обычный батник, которым очень удобно подключать сетевые диски, запускать какие-то уведомлялки на js, и прочая. Лежать должен в \\DomainController\NETLOGON.
Сохраняем файл с расширением PS1 в кодировке Unicode с именем CreateUser.PS1 в тот же каталог, куда и createuserbat.csv
4. Запускаем файл CreateUser.PS1
5. Учетные записи готовы, если их не видно в AD - обновите страницу консоли))) Однако все они выключены. Выделяем их все и включаем одной командой по правой кнопке мыши. В принципе есть параметр -Enabled, использованного нами командлета New-ADUser, и ее можно добавить в конец списка параметров, но мне кажется удобнее включать учетные записи когда пользователь придет к администратору (т.е. ко мне) за листочком с учетными данными.
Есть и другие варианты создания пользователя - с помощью questsoft и т.п., но если у вас Windows Server 2008 R2 SP1 \ PowerShell 2.0.1.1 - это работает, проверено.
UPDATE 1
Всегда заменяйте разделители - точки с запятой (;) на запятые(,)
UPDATE 2
Всегда проверяйте колчиество симоволов в пароле - одно должно соответствовать количеству символов в пароле, указнному в Default Domain Policy
UPDATE 3
Обязательным параметром следует сделать SamAccountName. Сделайте его равным параметру Name (т.е. логину)
UPDATE 4
Кроме полей "описание" все остальные поля рекомендуется заполнять латинскими буквами, без пробелов, например buhgalteria_permskogo_otdelenia_banka
UPDATE 5
Для выполнения очень удобно использовать не стандартную строку powershell, а некий giud, встроенный в ОС и позволяющий боле удобно править скрипты, содвать странички и пр пр. Запускается просто: выполнить \ вводим
powershell_ise
и энтер.
no subject
Date: 2012-06-14 01:11 pm (UTC)Выбивает ошибку:
"ConvertTo-SecureString : Не удается привязать аргумента к параметру "String", так как он имеет значение NULL.
C:\scripts\CreateUser.ps1:1 знак:547"
я, так понимаю, это связанно с полем пароля в файле исходных данных. Но в чем может быть проблема? Пароль введен "Qq123456".
Заранее спасибо :)
no subject
Date: 2012-06-14 01:39 pm (UTC)поэкспериментируйте, создайте без пароля, попробуйте другой пароль(тут важно какие у вас настройки безопасности в домене относительно длины пароля и его сложности - см. дефолт домэйн полиси, политика комп-ра\безопасность). Если создавать без пароля, то, наскоко помню,учетка будет отключена, ее можно включить потом отдельным батником и им же установить пароль...
э, голова другим занята, уж простите
no subject
Date: 2012-06-14 06:59 pm (UTC)на счет политики. Идея на счет политик тоже в голову пришла. :) Вписал пароль как надо.
попробую без пароля. Спасибо. Отпишу, как попробую. ;)
no subject
Date: 2012-06-15 07:39 am (UTC)Примечание:
файл .csv построен по примеру вашего скриншота, без поля password. Везде в Excel'е использовался англ. язык (хотя нужен будет русский.Решил пока на англ., чтоб проверить хоть такую работу), пустых полей нет. Пробелов лишних нигде нет, ";" заменил на ",".
причем, кол-во отображения ошибки = кол-ву полей для импорта ;)
"New-ADUser : Не удается проверить аргумент для параметра "Name". Аргумент пустой или имеет значение NULL. Укажите не пу
стой аргумент, не имеющий значение NULL, после чего повторите выполнение команды.
C:\scripts\GreateUser.ps1:1 знак:92
+ Import-CSV -Path "C:\scripts\createuserbat.csv" | ForEach-Object -process {New-ADuser -Name <<<< $_.Name -Surname $_
.Surname -City $_.City -Department $_.Department -GivenName $_.GivenName -Title $_.Title -Description $_.Description -D
isplayName $_.DisplayName -Division $_.Division -EmailAddress $_.EmailAddress -MobilePhone $_.MobilePhone -ScriptPath $
_.ScriptPath -Path "ou=Users_Test,dc=Test,dc=ru" -CannotChangePassword $true -ChangePasswordAtLogon $false -PasswordNot
Required $true -Company TEST}
+ CategoryInfo : InvalidData: (:) [New-ADUser], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.NewADUser"
Вот код самого .ps1 файла:
"
Import-CSV -Path "C:\scripts\createuserbat.csv" | ForEach-Object -process {New-ADuser -Name $_.Name -Surname $_.Surname -City $_.City -Department $_.Department -GivenName $_.GivenName -Title $_.Title -Description $_.Description -DisplayName $_.DisplayName -Division $_.Division -EmailAddress $_.EmailAddress -MobilePhone $_.MobilePhone -ScriptPath $_.ScriptPath -Path "ou=Users_Test,dc=omgk.com.ua,dc=ru" -CannotChangePassword $true -ChangePasswordAtLogon $false -PasswordNotRequired $true -Company TEST}
"
Возникли сомнения, по поводу того, что нужно вписывать в значение "dc", вместо "test" и "ru". Можете посмотреть?
no subject
Date: 2012-06-18 08:52 am (UTC)проверяйте код, любой символ может быть кривым
сохраняйте обязательно в кодировке UTF-8, или Unicod (лучше первое)
по-моему просто пробел между Name $
полный путь до OU обязателен, смотрите его в свойствах OU и проверяйте
"ou=Users_testdomain,dc=testdomain,dc=ru" - то есть мы указываем полный путь, используя для обознаяений OU (контейнеров) ou=, а для доменного имени dc=
no subject
Date: 2013-10-23 10:39 am (UTC)Не удается привязать аргумента к параметру "String", так как он имеет значение NULL.
и ведь ниче не менял в батниках
полез в инет
нашел свой же пост
проблема оказалась в том, что ЗАБЫЛ поменять точки с запятой (;) на запятые (,)
заменил - понеслась)))