'***************************************************************
' 批量添加用户的脚本,批量创建和添加到OU,自动创建对应OU。经过实践:
' 如果要创建空密码帐户:运行前,先调整“域安全策略”,修改“密码复杂"、"最小长度",
' 并gpupdate /force(WIN2K:secedit /refreshpolicy machine_policy /enforce)刷新组策略。
'
'
' 使用方法:cscript adduser.vbs NAME.TXT
' ========================================================
' NAME.TXT的内容格式:
' 姓名,带域后缀完整登录名,密码,所在OU,部门信息
'
' e.g. 郭强龙,guoql@sk.com.cn,skagon,信息安全部,信息安全部
' 熊剑,xiongjian@sk.com.cn,password,系统部,系统部
' 朱朱,zhuzhu@sk.com.cn,password12,信息安全部,信息安全部
' ========================================================
'
' skagon 2006-11-17
'********************************************************************
On Error resume next
If Wscript.Arguments.Count <> 1 Then Usage()
Const ADS_PROPERTY_APPEND = 3
set WshShell = WScript.CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set NamesFile = FSO.OpenTextFile(Wscript.Arguments(0), 1)
'变量
Dim FullName'姓名
Dim LoginName'登陆名
Dim FullLoginName'加域后缀登陆名
Dim FirstName'姓
Dim LastName'名
Dim Password'密码
Dim OUname'组织单位名称
Dim OfficeName'部门名称,用来看的,和OUname一样即可
'常量
'''Set objOU = GetObject("LDAP://CN=Users,dc=sk,dc=com,dc=cn")
'''这里"CN=Users",表示直接在域里面缺省的OU:Users创建中创建
'''
'''Set objOU = GetObject("LDAP://dc=sk,dc=com,dc=cn")
'''表示直接在域创建中,将和域缺省的几个对象并列,如Builtin,Computer.....
'''
'''Set objOU = GetObject("LDAP://OU=mcse,dc=sk,dc=com,dc=cn")
'''这里"OU=mcse",表示在自建的OU:mcse里面创建。
DO Until Namesfile.AtEndOfStream
Temp = NamesFile.ReadLine'把每一行的名字信息读出来
MyArray = Split(Temp, ",", -1, 1)
'得到姓名
FullName = MyArray(0)
Select Case Len(FullName)'分离姓名的姓和名(不使用于英文名)
Case 2
FirstName = Left(FullName,1)
LastName = Right(FullName,1)
Case 3
FirstName = Left(FullName,1)
LastName = Right(FullName,2)
Case 4
FirstName = Left(FullName,2)
LastName = Right(FullName,2)
Case Else
FirstName = Left(FullName,1)
LastName = Right(FullName,Len(FullName)-1)
End Select
'得到登录名
FullLoginName = MyArray(1)'完整登陆名称
LoginName = Left(MyArray(1),Instr(MyArray(1),"@")-1)
'得到域名
DomainName = Right(MyArray(1),Len(MyArray(1))-Instr(MyArray(1),"@"))'得到域名
strADsPath = ADsPath( DomainName )'得到 ADsPath ,便于 LDAP查询
'得到密码
Password = MyArray(2)
'得到 OU 名
OUname = MyArray(3)
'得到办公室名称
OfficeName = MyArray(4)
'Wscript.Echo MyArray(0) &" "& MyArray(1) &" "& MyArray(2) &" "& MyArray(3) &" "& MyArray(4)
'这里OU=" & OUname & ",表示在自建的OU里面创建。当没有OU时,执行下面部分(依赖于On Eoor Resume Next)
Set objOU2 = GetObject("LDAP://OU=" & OUname & "," & strADsPath)
CreateUser(objOU2)
Set objOU2 = Nothing
'如果没有创建OU,则创建一个OU,再在这个OU里面创建用户。记住,一定要objOU.SetInfo,才能生效
Set objDomain = GetObject("LDAP://" & strADsPath)
Set objOU = objDomain.Create("OrganizationalUnit", "ou=" & OUname)
objOU.SetInfo
CreateUser(objOU)
Set objDomain = Nothing
Set objOU = Nothing
Loop
NamesFile.close
Function usage()
Wscript.Echo "************* Active Direcroty批量用户添加脚本 *************" & vbCrLf
Wscript.Echo vbTab & "使用方法:"
Wscript.Echo vbTab & " cscript adduser.vbs name.txt"
Wscript.Echo vbTab & "name.txt的格式:"
Wscript.Echo vbTab & " 郭强龙,guoql@sk.com.cn,skagon,信息安全部,信息安全部"
Wscript.Echo vbTab & " 熊剑,xiongjian@sk.com.cn,password,系统部,系统部"
Wscript.Echo vbTab & " 朱朱,zhuzhu@sk.com.cn,password12,信息安全部,信息安全部"
Wscript.quit
End Function
Function CreateUser(objOU)
Set objUser = objOU.Create("user", "cn="& FullName)
objUser.Put "sAMAccountName", LoginName
objuser.displayName = FullName
objuser.userPrincipalName = FullLoginName
'''objUser.userAccountControl = 512
'''objuser.AccountDisabled = FALSE'功能同上
objuser.Description = OfficeName
objuser.physicalDeliveryOfficeName = OfficeName
objuser.sn = FirstName'姓
objuser.givenName = LastName'名字
'''objUser.telephoneNumber
'''objUser.EmailAddress
'''objUser.Put "pwdLastSet",0 '下次登陆时必须改密码
'''objUser.userWorkstations '下次登陆时必须改密码
objuser.SetInfo
objuser.SetPassword Password'这个动作必须在 objuser.SetInfo 之后,因为用户账户必须已经存在于ad中。
Wscript.Echo "帐号: " & FullName &vbTab& " 在OU: " & OUname & " 中创建成功!"
Set ojbuser = Nothing
End Function
Function ADsPath(strDomainName)
'从域名得到ADsPath ,便于 LDAP查询
arrDomLevels = Split(strDomainName, ".")
ADsPath = "dc=" & Join(arrDomLevels, ",dc=")
'Wscript.Echo ADsPath
End Function