How-to: Move an AD object to a new Organisational Unit.

This script can be used to move an AD object (User, Group, computer etc) to a different OU within Active Directory.

Option Explicit
' Move-object.vbs ObjectToMove TargetOU ObjectType
'
' Move an AD object into a specific OU
' Search AD (from the root) to find the current location of the object.

On Error Resume Next
Dim strObject,strTargetOU,objTargetOU,objRootDSE,strDNSDomain,strTarget,objConnection,objCmd,objRecordSet
Dim Object,strParent,objParentOU,strObjectName,strObjectDN,strObjectOU

strObject =  Wscript.Arguments(0)
strTargetOU = Wscript.Arguments(1)
strObjectType = Wscript.Arguments(2)

wscript.Echo "Move the Object " & strObject 
'wscript.Echo "into the OU: " & strTargetOU

Set objTargetOU = GetObject("LDAP://" & strTargetOU)

' Connect to the LDAP server’s root object
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("defaultNamingContext")
strTarget = "LDAP://" & strDNSDomain

' Connect to AD Provider
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"

' Search command
Set objCmd = CreateObject("ADODB.Command")
Set objCmd.ActiveConnection = objConnection 

' Query to match Object name
objCmd.CommandText = "SELECT Name, ADsPath,distinguishedName FROM '" & strTarget & "' WHERE objectCategory = strObjectType AND name='" & strObject & "'"
' Run the Search command
Const ADS_SCOPE_SUBTREE = 2
objCmd.Properties("Page Size") = 100
objCmd.Properties("Timeout") = 30
objCmd.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCmd.Properties("Cache Results") = False
Set objRecordSet = objCmd.Execute

' Iterate through the results
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
   strObjectName = objRecordSet.Fields("Name")
   wscript.Echo "Object Name: " & strObjectName
   strObjectDN = objRecordSet.Fields("distinguishedName")
   wscript.Echo "Object DN: " & strObjectDN
   objRecordSet.MoveNext
Loop

' Having the current OU we can bind directly to the Object that will be moved.
Set Object = GetObject("LDAP://" & strObjectDN)
wscript.Echo Object.ADsPath

' Optionally you may want to display the parent OU.
 strParent = Object.Parent
 'wscript.Echo "Parent: " & strParent
 Set objParentOU = GetObject(strParent)
 strObjectOU = objParentOU.distinguishedName
 'wscript.Echo "ParentOU: " & strObjectOU


' Move the Object
On Error Resume Next
wscript.Echo "Move the Object [" & strObject & "] to " & strTargetOU
objTargetOU.MoveHere Object.ADsPath, vbNullString

if err.number <> 0 then
   wscript.Echo "Error - failed."
else
   wscript.Echo "Complete."
end if 

On Error Goto 0

The valid AD Object types are: User, Contact, Group, Shared Folder, Printer, Computer, Domain Controllers, OU

Examples

cscript Move-object.vbs "johndoe" "LDAP://OU=Users,DC=ss64,DC=com" "User"

“The majority of men meet with failure because of their lack of persistence in creating new plans to take the place of those which fail” ~ Napoleon Hill

Related VBScript commands

SearchAD - Search AD for Users, Computers or groups.


 
Copyright © 1999-2024 SS64.com
Some rights reserved