为了准备测试,我们需要加载一个包含多达40万用户和10万组的Windows,以及它们之间的各种映射。
为了实现这一点,已经编写了一个powershell脚本,运行在服务器2012 R2 VM (4核,8GB内存)上。然而,按照脚本运行的速度,它看起来可能需要一个多月的时间才能完成。
我们已经使用net命令和Add命令尝试了这个脚本,以查看是否有任何速度的提高。似乎不存在。该脚本使用几个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的最快的方式,有什么建议吗?
谢谢
发布于 2018-12-17 10:25:51
AD的PowerShell cmdlet很方便,但效率不高。
直接使用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"
而不是"user"
。
这还需要一段时间。网络连接对你的伤害最大。所以你必须:
如果您确实在DC上运行此操作,那么(如果域上有多个DC),请确保目标是您所在的DC。您可以通过将DC名称注入LDAP://
字符串来做到这一点,如下所示:
"LDAP://dc1.domain.com/OU=IT,OU=Departments,OU=Employees,DC=Globomantics,DC=Local"
数字2受到以下事实的限制:每个新用户必须执行2个请求(一个要创建,一个要设置密码)。但是您可以做其他的事情来降低数字,比如先创建所有用户并存储每个新用户的distinguishedName
,您可以自己计算(而不是向AD请求),因为传递给Create()
和OU的是Create()
。因此,对于上面的示例,新用户的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
数组。
这样,您就有一个创建整个组的网络请求,成员已经设置,而不是每个成员的一个网络请求。
https://stackoverflow.com/questions/53820371
复制