Find all the users with a specific Office in Active Directory (physicalDeliveryOfficeName) and update it to something new. This script could also be modified to target different user attributes.
'OfficeRename.vbs ' ' Find all the users with a specific Office in AD and ' update their Office to a new Name. ' Option Explicit Dim objRootDSE, strDNSDomain, adoCommand, adoConnection Dim strBase, strFilter, strAttributes, strQuery, adoRecordset Dim strDN, strFirstName, strLastName, objUser, strSite,strUserName, strOldOffice, StrNewOffice, intOfficeLen strOldOffice = "College House" strNewOffice = "New Grand Central" intOfficeLen = len(strOldOffice) ' Determine DNS domain name. Set objRootDSE = GetObject("LDAP://RootDSE") strDNSDomain = objRootDSE.Get("defaultNamingContext") ' Use ADO to search Active Directory. Set adoCommand = CreateObject("ADODB.Command") Set adoConnection = CreateObject("ADODB.Connection") adoConnection.Provider = "ADsDSOObject" adoConnection.Open "Active Directory Provider" adoCommand.ActiveConnection = adoConnection ' Search entire domain. strBase = "<LDAP://" & strDNSDomain & ">" ' Filter on all user objects. strFilter = "(&(objectCategory=person)(objectClass=user))" ' Comma delimited list of attribute values to retrieve. strAttributes = "distinguishedName,givenName,sn,physicalDeliveryOfficeName" ' Construct the LDAP query. strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree" ' Run the query. adoCommand.CommandText = strQuery adoCommand.Properties("Page Size") = 100 adoCommand.Properties("Timeout") = 30 adoCommand.Properties("Cache Results") = False Set adoRecordset = adoCommand.Execute ' Enumerate the resulting recordset. Do Until adoRecordset.EOF ' Retrieve values. strDN = adoRecordset.Fields("distinguishedName").Value strDN = Replace(strDN, "/", "\/") strSite = adoRecordset.Fields("physicalDeliveryOfficeName").Value strFirstName = adoRecordset.Fields("givenName").Value & "" strLastName = adoRecordset.Fields("sn").Value & "" strUserName = adoRecordset.Fields("distinguishedName").Value If (left(strSite,intOfficeLen) = strOldOffice) Then ' Echo User wscript.echo strFirstName & "." & strLastName & " " & strUserName ' Bind to user object. Set objUser = GetObject("LDAP://" & strDN) ' Assign value to physicalDeliveryOfficeName attribute. objUser.physicalDeliveryOfficeName = strNewOffice ' Save change. objUser.SetInfo End If adoRecordset.MoveNext Loop adoRecordset.Close adoConnection.Close ' Clean up. Set objRootDSE = Nothing Set adoCommand = Nothing Set adoConnection = Nothing Set adoRecordset = Nothing
“Nearly all men can stand adversity, but if you want to test a man's character, give him power” ~ Abraham Lincoln
Related:
ListUsers - List all Users
UserInfo - List properties of a User (as shown in ADUC)
UserName - List user's simple name when called with a Distinguished Name
SearchAD - Search AD for either Users, Computers or Workgroups