'File:                  BulkCreateUsers.vbs
'Version:               1.0
'Author:                Bennett Scharf   http://www.bennett-scharf.com
'For:                   n/a
'Purpose:               Quick & dirty user creation script.  Parses tab separated text file containing user IDs & Full Names
'Creation Date:         22 March 05
'Revision Date: n/a
'Related Files:         users.txt - input file
'                       cscript.exe -vbscript console command intrepreter part of standard OS install
'Operating System:      Windows 2000 & later
'Usage:                 cscript BulkCreateUsers.vbs
'Exit codes:            Normal exit: 0, Error Exit > 0

Option Explicit

Const User_OU "OU=Some OU3,OU=Some OU2,dc=someOU,dc=SomeDomian,dc=com"
Const Group_OU "OU=Some Groups OU,OU=Some OU2,dc=someOU,dc=SomeDomain,dc=com"
Const strInputFileName "H:\Code\VBScript\adsi\users.txt"
Const strPassword "S0meStr0ngP@sssw0rd"  'initial user password
Const strGroup "SomeGroupName"   'The group we want to add these users to
Const ForReading 1ForWriting 2ForAppending 8
Dim strInput
Dim strUserInfo

'open the import file

Dim fsof
Set fso CreateObject("Scripting.FileSystemObject")
On Error Resume Next
Set 
fso.OpenTextFile(strInputFileNameForReadingFalse)

If Err.Number <> Then    'Trap file open errors and Exit
    
Wscript.echo Err.Description
    Wscript.quit 
(Err.Number)
End If
On Error GoTo 
0

Do While Not f.AtEndOfStream
   strInput 
f.ReadLine
       strUserInfo 
Split(strInput,vbTab,2vbTextCompare)
   
WScript.Echo strUserInfo(0), strUserInfo(1)

   
MakeUser strUserInfo(0), strUserInfo(1)
   
WScript.Sleep 3000  'a pause to avoid race conditions
   
SetPassword strUserInfo(0), strPassword
   EnableUser strUserInfo
(0)
   
AddGroup strUserInfo(0), strGroup
Loop
'main routine ends here

Sub MakeUser(strUserstrDisplayName)
   
Set objOU GetObject("LDAP://"User_OU)
   
Set objUser objOU.Create("User""cn=" strUser)
   
objUser.Put "sAMAccountName"strUser
   objUser.
Put "displayName"strDisplayName
   objUser.
Put "description"strDisplayName
   objUser.SetInfo
   
Set objUser = Nothing
End Sub

Sub 
SetPassword (strUserstrPassword)
   
Set objUser GetObject("LDAP://cn=" strUser "," User_OU)
   
objUser.SetPassword strPassword
   
Set objUser = Nothing
End Sub

Sub 
SetPwexp (strUser)
   
Set objUser GetObject("LDAP://cn=" strUser "," User_OU)
   
objUser.Put "pwdLastSet"0
   objUser.setinfo
   
Set objUser = Nothing
End Sub


Sub 
AddGroup(strUserstrGroup)
   
Set objUser GetObject("LDAP://cn=" strUser "," User_OU)
   
Set objGroup GetObject("LDAP://cn=" strGroup "," Group_OU)
   
objGroup.Add objUser.ADSPath
   
Set objGroup = Nothing
   Set 
objUser = Nothing
End Sub


Sub 
EnableUser(strUser)
   
Const ADS_UF_ACCOUNTDISABLE 2
   
   
Set objUser GetObject("LDAP://cn=" strUser "," User_OU)

   
intUAC objUser.Get("userAccountControl")
   
   
If intUAC And ADS_UF_ACCOUNTDISABLE Then
       
objUser.Put "userAccountControl"intUAC Xor ADS_UF_ACCOUNTDISABLE
       objUser.SetInfo 
   
End If
   Set 
objUser = Nothing
End Sub