parafoxer: (foxic)
[personal profile] parafoxer
Столкнулся и ничего толкового в инете не нашел. Все какие-то урывки и куски. Батник (просто BAT) у нас есть, но как-то на 2008 сервере уже несерьезно))). Решил написать его сам. Получилось.
Ну и теперь решил описать так, чтобы ЛЮБОМУ было понятно, кто хоть чуть-чуть видел 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
и энтер.

Date: 2012-06-14 01:11 pm (UTC)
From: [identity profile] vladimir arnaut (from livejournal.com)
Добрый день. Спасибо за статью. Помогите разобраться с проблемой импорта.
Выбивает ошибку:
"ConvertTo-SecureString : Не удается привязать аргумента к параметру "String", так как он имеет значение NULL.
C:\scripts\CreateUser.ps1:1 знак:547"

я, так понимаю, это связанно с полем пароля в файле исходных данных. Но в чем может быть проблема? Пароль введен "Qq123456".

Заранее спасибо :)

Date: 2012-06-14 01:39 pm (UTC)
From: [identity profile] parafoxer.livejournal.com
сильно не помогу, ибо написал и забыл))) помню только что сразу паролем учетку может не давать создавать, отчего - уже не помню
поэкспериментируйте, создайте без пароля, попробуйте другой пароль(тут важно какие у вас настройки безопасности в домене относительно длины пароля и его сложности - см. дефолт домэйн полиси, политика комп-ра\безопасность). Если создавать без пароля, то, наскоко помню,учетка будет отключена, ее можно включить потом отдельным батником и им же установить пароль...
э, голова другим занята, уж простите
Edited Date: 2012-06-14 01:41 pm (UTC)

Date: 2012-06-14 06:59 pm (UTC)
From: [identity profile] vladimir arnaut (from livejournal.com)
понимаю, бывает))

на счет политики. Идея на счет политик тоже в голову пришла. :) Вписал пароль как надо.
попробую без пароля. Спасибо. Отпишу, как попробую. ;)

Date: 2012-06-15 07:39 am (UTC)
From: [identity profile] vladimir arnaut (from livejournal.com)
убрал поле пароль. Вот что получаю. Почти такая же ошибка, подсказать что-то сможете?;)

Примечание:
файл .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". Можете посмотреть?

Date: 2012-06-18 08:52 am (UTC)
From: [identity profile] parafoxer.livejournal.com
я в поуэршеле не большой спец
проверяйте код, любой символ может быть кривым
сохраняйте обязательно в кодировке UTF-8, или Unicod (лучше первое)
по-моему просто пробел между Name $

полный путь до OU обязателен, смотрите его в свойствах OU и проверяйте

"ou=Users_testdomain,dc=testdomain,dc=ru" - то есть мы указываем полный путь, используя для обознаяений OU (контейнеров) ou=, а для доменного имени dc=
Edited Date: 2012-06-18 08:58 am (UTC)

Date: 2013-10-23 10:39 am (UTC)
From: [identity profile] parafoxer.livejournal.com
)))сегодня сам получил ошибку
Не удается привязать аргумента к параметру "String", так как он имеет значение NULL.
и ведь ниче не менял в батниках
полез в инет
нашел свой же пост
проблема оказалась в том, что ЗАБЫЛ поменять точки с запятой (;) на запятые (,)
заменил - понеслась)))

Profile

parafoxer: (Default)
parafoxer

September 2025

S M T W T F S
 123456
78910111213
14151617181920
21 222324252627
282930    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 10th, 2026 02:14 pm
Powered by Dreamwidth Studios