'***************************************************************
'    批量添加用户的脚本,批量创建和添加到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

posted on 2011-08-16 10:10  EricLi  阅读(2180)  评论(0编辑  收藏  举报