Самый быстрый способ загрузить Active Directory с фиктивными данными? - PullRequest
0 голосов
/ 17 декабря 2018

При подготовке к тесту нам необходимо загрузить виртуальную машину Windows Server с 400 000 пользователей и 100 000 групп и различными сопоставлениями между ними.

Для этого был написан сценарий powershell, работающий на виртуальной машине Server 2012 R2 (4 ядра, 8 ГБ ОЗУ).Тем не менее, при той скорости, с которой выполняется скрипт, похоже, что его выполнение может занять больше месяца.

Мы попробовали скрипт, используя команды net и команды Add-AD, чтобы увидеть, есть ли какое-либо увеличение скорости.Там, кажется, нет.Сценарий использует несколько циклов For для создания пользователей, создания групп и добавления определенных номеров пользователей к групповым номерам.

Примеры команд:

#net users $userName mypassword /add
#New-ADUser -Name $userName -SamAccountName $userName -DisplayName $userName -AccountPassword mypassword -Enabled $true

and

net group $groupName $userName /add
#Add-ADGroupMember -Identity $groupName -Members $userName

Любые предложения по Самый быстрый способ загрузить AD с массой новых пользователей / групп / сопоставлений?

Спасибо

1 Ответ

0 голосов
/ 17 декабря 2018

Командлеты 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().

Это все еще займет некоторое время.Это сетевые подключения, которые причинят вам боль больше всего.Таким образом, вы должны:

  1. Получить как можно ближе физически к DC (запустите его на DC, если можете) и
  2. Держитеколичество сетевых запросов уменьшится на

Если вы выполняете это на контроллере домена, то (если домен имеет более одного контроллера домена), убедитесь, что вы выбрали целевой контроллер домена, на котором вы работаете.Это можно сделать, введя имя 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 для каждого участника.

Таким образом, у вас есть один сетевой запрос, который создает целую группу с участниками ужеустановлен, а не один сетевой запрос для каждого участника.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...