Командлеты PowerShell для AD удобны, но они не эффективны.
Использование ADSI напрямую, скорее всего, будет быстрее, поскольку дает вам больший контроль над происходящим.PowerShell имеет сокращенную запись [ADSI]"LDAP://thepath"
для создания объектов (они технически DirectoryEntry
объекты, но в примерах здесь используются методы IADs
).
Существуют инструкции посоздание пользователей здесь , но я могу подвести итог:
[ADSI]$OU = "LDAP://OU=IT,OU=Departments,OU=Employees,DC=Globomantics,DC=Local"
$new = $OU.Create("user","CN=Ginger Snaps")
$new.put("samaccountname","gsnaps")
$new.setinfo()
#Account is created disabled, so we need to enable and set a password
#(the password can't be set until it's created)
$new.put("userAccountControl",544)
$new.setpassword("P@ssw0rd")
$new.setinfo()
Вы используете $new.put()
для любых других атрибутов, которые вы хотите установить.Вы также можете создавать группы таким же образом, просто используйте "group"
вместо "user"
в методе Create()
.
Это все еще займет некоторое время.Это сетевые подключения, которые причинят вам боль больше всего.Таким образом, вы должны:
- Получить как можно ближе физически к DC (запустите его на DC, если можете) и
- Держитеколичество сетевых запросов уменьшится на
Если вы выполняете это на контроллере домена, то (если домен имеет более одного контроллера домена), убедитесь, что вы выбрали целевой контроллер домена, на котором вы работаете.Это можно сделать, введя имя DC в строки LDAP://
, например:
"LDAP://dc1.domain.com/OU=IT,OU=Departments,OU=Employees,DC=Globomantics,DC=Local"
Номер 2 ограничен тем, что приходится делать 2 запроса на новыйпользователь (один для создания, один для установки пароля).Но вы можете сделать другие вещи, чтобы уменьшить число, например, сначала создать всех пользователей и сохранить distinguishedName
каждого нового пользователя, который вы можете вычислить самостоятельно (вместо того, чтобы запрашивать его у AD), потому что это CN=user
, который выперейти к Create()
плюс OU.Таким образом, для приведенного выше примера DN нового пользователя:
CN=Ginger Snaps,OU=IT,OU=Departments,OU=Employees,DC=Globomantics,DC=Local
После того, как у вас есть все, вы можете создать группы и добавить всех участников за один раз.Например:
[ADSI]$OU = "LDAP://OU=IT,OU=Departments,OU=Employees,DC=Globomantics,DC=Local"
$new = $OU.Create("group","CN=group1")
$new.put("samaccountname","group1")
$members = @("CN=Ginger Snaps,OU=IT,OU=Departments,OU=Employees,DC=Globomantics,DC=Local", `
"CN=Another User,OU=IT,OU=Departments,OU=Employees,DC=Globomantics,DC=Local")
$new.put("member", $members)
$new.setinfo()
Где $members
- ваш массив distinguishedName
для каждого участника.
Таким образом, у вас есть один сетевой запрос, который создает целую группу с участниками ужеустановлен, а не один сетевой запрос для каждого участника.