This one proved to be a little more difficult then I first thought. We were able to get a few attributes to change, but in further testing; I found that AD was throwing a fit. The problem was resolved using the ADSI Editor Snap-in. What I did was watch each value and whether or not the correct value was reflected in the User accounts properties. The following code relies on a text file containing the old and new user names formatted as such:
You can modify the code to import the usernames anyway that works for you. Also, do not forget to change the variables ParentDN and strUPNSuffix to match your environments.
' Author: Jason A. Yoder, MCT
' Date: May 15, 2009
' Required Files:
' - A Text file named "names.txt". In this script, the file
' location is hard coded.
' The format for the text file is %OldUserName%,%NewUserName%
' Other Information:
' - The interesting part of this code is in the Do While...Loop.
' It does not matter how you get the data into the script
' as long as you have the ParentDN and both old and new usernames.
Const ForReading = 1
ParentDN = "OU=HR,DC=FourthCoffe,DC=com" ' Change this line to reflect your environment.
strUPNSuffix = "ens.com" ' Change this line to reflect your environment.
' Read in the data file of old and new user names.
Set objFilesys = CreateObject("Scripting.FileSystemObject")
Set objFileText = objFileSys.OpenTextFile("C:\Users\Administrator\Desktop\Test\Names.txt", ForReading, true)
Do Until objFileText.AtEndOfStream '
strText = objFileText.Readline ' Reads the Names.txt file one line at a time.
aryText = Split(strText,",") ' Slipts each value into different cells of aryText.
strUserOldName = aryText(0)
strUserNewName = aryText(1)
set objCont = GetObject("LDAP://" & ParentDN)
objCont.MoveHere "LDAP://cn=" & strUserOldName & "," & ParentDN, "cn=" & strUserNewName
set objUser = GetObject("LDAP://cn=" & strUserNewName & "," & ParentDN)
objUser.Put "userPrincipalName",strUserNewName & "@" & strUPNSuffix