在准备测试时,我们需要加载最多包含40万名用户和100,000个组的Windows Server VM,以及它们之间的各种映射。
已编写了Powershell脚本来实现此目的,该脚本在Server 2012 R2 VM(4核,8GB RAM)上运行。但是,以脚本运行的速度来看,它似乎可能需要一个多月才能完成。
我们已经使用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
关于以最快的方式加载大量新用户/组/映射的广告的任何建议吗?
谢谢
答案 0 :(得分:6)
用于AD的PowerShell cmdlet很方便,但是效率 无效。
直接使用ADSI可能会更快,因为它可以让您更好地控制正在发生的事情。 PowerShell使用[ADSI]"LDAP://thepath"
的快捷方式来创建对象(从技术上讲,它们是DirectoryEntry
对象,但是此处的示例使用IADs
方法)。
有创建用户here的说明,但是我可以总结一下:
[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为目标。您可以通过将DC名称插入LDAP://
字符串中来做到这一点,如下所示:
"LDAP://dc1.domain.com/OU=IT,OU=Departments,OU=Employees,DC=Globomantics,DC=Local"
第2个数字受以下事实的限制,即您必须对每个新用户进行2个请求(一个创建,一个设置密码)。但是您可以执行其他操作来减少数量,例如首先创建所有用户并存储每个新用户的distinguishedName
,您可以计算自己(而不是询问AD),因为它是{{1 }},您将传递给CN=user
和OU。因此,对于上面的示例,新用户的DN为:
Create()
拥有所有这些成员后,即可创建组并一次性添加所有成员。例如:
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
的数组。
这样,您将有一个网络请求创建一个已设置了成员的整个组,而不是一个网络请求每个成员。