Ну и теперь решил описать так, чтобы ЛЮБОМУ было понятно, кто хоть чуть-чуть видел 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-03-06 08:22 am (UTC)синтаксис не такой прозрачный, как в пауэршеле, но основные шаги поясню:
1. Создаем экселевский файл, в котором каждая строчка будет иметь такой примерно вид (пробелы тут - это границы между ячейками, т.е. каждое значение с своей ячейке)
call Add_User Podrazdelenie IvanovAM password "Иванов Андрей Михайлович" "Начальник подразделения"
2. Сохраняем эксель-вариант как документ эксель
3. Сохраняем эксель-вариант как документ TXT
4. Меняем расширение файла на BAT
5. Создаем файл с именем Add_User с таким содержимым (пояснения заremлены):
rem подключаем к контроллеру домена, на котором будем выполнять скрипт локальный диск файлового сервера server. Это нужно для создания личной папки пользователя в такой структуре:
сетевой диск \ папка подразделенеия \ личная папка пользователя (доступ только у Администраторов домена и самого пользователя) И общая папка подразделения (доступ только у Администраторов домена и всех членов группы безопасности данного подразделения) \ файлы данных***
net use u: \\server\d$
set drive=u:\
set org_gr=Office
rem Устанавливаем переменные для использования в батнике***
set group=%1
set nik=%2
set pass=%3
set name=%4
set comm=%5
set mail=%6
echo passed=1
cd /d %drive%%org_gr%\%group%
echo passed=2
rem Создаем пользователя. Пераметр scriptpath смотрит на батник для подключения сетевых дисков, батник лежит в DC\Netlogon***
net user %nik% %pass% /add /active:yes /fullname:%name% /comment:%comm% /expires:never /passwordchg:no /passwordreq:yes /scriptpath:office.bat /DOMAIN
echo passed=3
rem Добавляем пользователя в групповую группу ****
net group %group% %nik% /add /domain
echo passed=4
rem Создаем домашнюю папку пользователя ****
md %nik%
xcacls %nik% /T /G %nik%:C /Y
cacls %nik% /E /G "администраторы домена":F
echo passed=5
rem Отключаем диск файлового сервера от КД***
cd /d c:\Scripts\Office
net use u: /delete
6. Запускаем файл из пункта 4.
7. Если что-то не идет - проверяем параметры. Пользовательс создается в OU Users, так что если они хранятся в другом контейнере - их надо перемещать особо.
Скрипт для создания групп безопасности для ПОДРАЗДЕЛЕНИЙ:
принцип тот же - создам файл, передающий в конвейер значения
1. Создаем файл содержащий строки вида:
call Add_Group Podrazdelenie "Центр01"
2. Создаем файл с именем Add_Group
rem подключаем файловый сервер к КД, устанавливаем переменные***
net use u: \\server\d$
set drive=u:\
set org_gr=Office
set group=%1
set comm=%2
rem Переходим в корень диска
cd /D %drive%%org_gr%
rem Создаем папку группы
md %group%
rem Создаем группу
net group %group% /comment:%comm% /Domain /Add
rem Добавляем группу в общую группу (
rem net group %org_gr% %group% /add /domain
rem Заменяем права для группы организации
xcacls %group% /T /G %group%:C /Y
rem Добавляем права
cacls %group% /E /G "Администраторы домена":F
rem Создаем общую папку группы
cd %group%
md Common
rem Переходим на КД обратно
cd /d c:\Scripts\Office
net use u: /delete
3. Запускаем файл из пункта 1.
Сразу скажу что писал эти батники не я, но они работают у нас. Любые проблемы обычно связаны с ошибкой в кодировке, в пробелах, путях, синтаксисе. Тут не пауэершел - подсказок в какой строке косяк не дают.
Таких же батников куча на любом форуме админов, но пишут в основном на VBS, а мне VBS категорически не нравится - я не программист, я администратор, и вникать в программные загогулины никакого желания не имею))
Удачного запуска, коллега)))