Recipe 5.6 Moving the Objects in an OU to a Different OU

5.6.1 Problem

You want to move some or all of the objects in an OU to a different OU. You may need to do this as part of a domain restructuring effort.

5.6.2 Solution Using a graphical user interface
  1. Open the Active Directory Users and Computers snap-in.

  2. If you need to change domains, right-click on "Active Directory Users and Computers" in the left pane, select Connect to Domain, enter the domain name, and click OK.

  3. In the left pane, browse to the OU that contains the objects you want to move and click on it.

  4. Highlight the objects in the right pane you want to move, right-click on them, and select "Move."

  5. Browse to the parent container you want to move the objects to, click on it.

  6. Click OK.

  7. Press F5 to refresh the contents of the OU. If objects still exist, repeat the previous three steps. Using a command-line interface
> for /F "usebackq delims=""" %i in (`dsquery * "<OldOrgUnitDN>" -scope onelevel`)[RETURN] 
do dsmove -newparent "<NewOrgUnitDN>" %i Using VBScript
' This code moves objects from the "old" OU to the "new" OU
strOldOrgUnit = "<OldOrgUnitDN>" ' e.g. ou=Eng Tools,dc=rallencorp,dc=com
strNewOrgUnit = "<NewOrgUnitDN>" ' e.g. ou=Tools,dc=rallencorp,dc=com
' ------ END CONFIGURATION ---------

set objOldOU = GetObject("LDAP://" & strOldOrgUnit)
set objNewOU = GetObject("LDAP://" & strNewOrgUnit)
for each objChildObject in objOldOU
    Wscript.Echo "Moving " & objChildObject.Name
    objNewOU.MoveHere objChildObject.ADsPath, objChildObject.Name

5.6.3 Discussion Using a graphical user interface

If you want to move more than 2,000 objects at one time, you will need to modify the default number of objects displayed as described in Discussion section of Recipe 5.3. Using a command-line interface

Since dsmove can move only one object at a time, I had to use the for command to iterate over each child object returned from dsquery. Also note that if you want to move more than 100 objects, you'll need to specify the -limit xx option with dsquery, where xx is the maximum number of objects to move (use 0 for all). Using VBScript

For more information on the MoveHere method, see Recipe 4.17.

5.6.4 See Also

Recipe 4.17 for moving objects, Recipe 5.3 for enumerating objects in an OU, and MSDN: IADsContainer::MoveHere

    Chapter 3. Domain Controllers, Global Catalogs, and FSMOs
    Chapter 6. Users
    Appendix A. Tool List