views:

753

answers:

1

I need to add a bunch of users to an AD domain and obviously don't want to manually enter. I also don't want to use CSVDE because I want to add passwords in. I don't have much of a background with writing VBScripts so i found one on the internet from techrepublic. The problem is when I run the script I get an expected loop error and the users in the csv file never get added. if I throw a loop line at the end of the vbs file it creates the user but then gives me an error that the account already exists, because it is clearly trying to run the script again. So does anyone have any insight on what I need to change to make this script run properly?

' ---------------------------------------------------

' Script: createusersfromcsv.vbs ' Author: Scott Lowe ' Input: CSV file with layout logonname,firstname,lastname,password ' Date: December 21, 2005 ' Change log: ' no changes '----------------------------------------------------

Option Explicit

Dim sCSVFileLocation Dim sCSVFile Dim oConnection Dim oRecordSet Dim oNewUser

' Variables needed for LDAP connection Dim oRootLDAP Dim oContainer

' Holding variables for information import from CSV file Dim sLogon Dim sFirstName Dim sLastName Dim sDisplayName Dim sPassword Dim nPwdLastSet Dim nUserAccountControl ' Used to enable the account Dim sDomain

' Modify this to match your company's AD domain sDomain="mydomain.com"

' Input file location sCSVFileLocation = "C:\Scripts\" 'KEEP TRAILING SLASH!

' Full path to input file sCSVFile = sCSVFileLocation&"Book2.csv"

' Commands used to open the CSV file and select all of the records set oConnection = createobject("adodb.connection") set oRecordSet = createobject("adodb.recordset") oConnection.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & sCSVFileLocation & ";Extended Properties=""text;HDR=NO;FMT=Delimited""" oRecordSet.open "SELECT * FROM " & sCSVFile ,oConnection

' Create a connection to the Active Directory Users container. Set oRootLDAP = GetObject("LDAP://rootDSE") Set oContainer = GetObject("LDAP://cn=Users," & _ oRootLDAP.Get("defaultNamingContext"))

' Allows processing to continue even if an error occurs (i.e. dup user) ' We put this below the CSV and AD information since processing can ' continue with a single bad record, but not if there is a problem with ' the CSV file or AD connection on error resume next

do until oRecordSet.EOF ' Reads the values (cells) in the sInputFile file.

' --------- Start creating user account ' Read variable information from the CSV file ' and build everything needed to create the account sLogon = oRecordSet.Fields.Item(0).value sFirstName = oRecordSet.Fields.Item(1).value sLastName = oRecordSet.Fields.Item(2).value sDisplayName = sLastName&", "&sFirstName sPassword = oRecordSet.Fields.Item(3).value

' Build the User account Set oNewUser = oContainer.Create("User","cn="&sFirstName&" "&SLastName)

oNewUser.put "sAMAccountName",lcase(sLogon) oNewUser.put "givenName",sFirstName oNewUser.put "sn",sLastName oNewUser.put "UserPrincipalName",lcase(SLogon)&"@"&sDomain oNewUser.put "DisplayName",sDisplayName oNewUser.put "name",lcase(sLogon)

' Write this information into Active Directory so we can ' modify the password and enable the user account oNewUser.SetInfo

' Change the users password oNewUser.SetPassword sPassword oNewUser.Put "pwdLastSet", 0

' Enable the user account oNewUser.Put "userAccountControl", 512 oNewUser.SetInfo

' Used only for debugging 'if err.number = -2147019886 then ' msgbox "User logon " & sLogon & "already exists" 'End If

' --------- End of user account creation

A: 

I found the answer from some further google searching.
At the end I needed a: oRecordSet.MoveNext loop

And it worked then.