Help to create VBScript to change OU

Home Forums Scripting Windows Script Host Help to create VBScript to change OU

This topic contains 2 replies, has 3 voices, and was last updated by Rems Rems 8 years, 9 months ago.

Viewing 3 posts - 1 through 3 (of 3 total)
  • Author
    Posts
  • Avatar
    trevor.march
    Member
    #153552

    Trying to make a script to pull anything with the ‘FC8’ in the name in the Computers OU and put it in the UNMANAGED OU.

    Please help…this is what I have so far and it’s not working…

    ‘ MoveOU.vbs – Script = Not easy.
    ‘ VBScript to Move computers from the Computers to the unmanaged OU
    ‘ Author Trevor March
    ‘ —————————————————————–‘

    Option Explicit
    Dim objConnection, objCommand, objRecordSet, objNewOU, objMoveComputer
    Dim strComputer, strInitial, strSourceOU, strDestinationOU
    Dim intCounter

    ‘ Creates link to Active Directory
    Const ADS_SCOPE_SUBTREE = 2
    Set objConnection = CreateObject(“ADODB.Connection”)
    Set objCommand = CreateObject(“ADODB.Command”)
    objConnection.Provider = “ADsDSOObject”
    objConnection.Open “Active Directory Provider”

    Set objCOmmand.ActiveConnection = objConnection

    ‘ Selects all the computer objects (not Users) in the Computers OU
    objCommand.CommandText = _
    “Select Name, Location from ‘LDAP://OU=Computers,dc=gfoundries,dc=com'” _
    & “where objectClass=’computer'”
    objCommand.Properties(“Page Size”) = 1000
    objCommand.Properties(“Timeout”) = 30
    objCommand.Properties(“Searchscope”) = ADS_SCOPE_SUBTREE
    objCommand.Properties(“Cache Results”) = False

    ‘ Treats the computer objects as a set of record cards
    Set objRecordSet = objCommand.Execute
    objRecordSet.MoveFirst
    ‘ Get all the records
    Do Until objRecordSet.EOF
    strInitial = UCase(Left(objRecordSet.Fields(“Name”).Value,2))

    ‘ Filter Computers.
    If strInitial = “FC8” Then

    strComputer = objRecordSet.Fields(“Name”).Value
    strComputer = “CN=”& strComputer

    intCounter = intCounter +1
    Wscript.Echo “Computer Name: ” & strComputer

    strSourceOU = “,OU=Computers,DC=gfoundries,DC=com”
    strDestinationOU = “OU=UNMANAGED,DC=gfoundries,DC=com”

    Set objNewOU = GetObject(“LDAP://” & strDestinationOU)
    Set objMoveComputer = objNewOU.MoveHere _
    (“LDAP://” & strComputer & strSourceOU, strComputer)

    ‘ Next line matches If strInitial
    End if

    objRecordSet.MoveNext

    Loop

    Wscript.Echo intCounter & ” ” & strInitial & ” moved”

    ‘ End of VBScript[/CODE][CODE]’ MoveOU.vbs – Script = Not easy.
    ‘ VBScript to Move computers from the Computers to the unmanaged OU
    ‘ Author Trevor March


    Option Explicit
    Dim objConnection, objCommand, objRecordSet, objNewOU, objMoveComputer
    Dim strComputer, strInitial, strSourceOU, strDestinationOU
    Dim intCounter

    ‘ Creates link to Active Directory
    Const ADS_SCOPE_SUBTREE = 2
    Set objConnection = CreateObject(“ADODB.Connection”)
    Set objCommand = CreateObject(“ADODB.Command”)
    objConnection.Provider = “ADsDSOObject”
    objConnection.Open “Active Directory Provider”

    Set objCOmmand.ActiveConnection = objConnection

    ‘ Selects all the computer objects (not Users) in the Computers OU
    objCommand.CommandText = _
    “Select Name, Location from ‘LDAP://OU=Computers,dc=gfoundries,dc=com'” _
    & “where objectClass=’computer'”
    objCommand.Properties(“Page Size”) = 1000
    objCommand.Properties(“Timeout”) = 30
    objCommand.Properties(“Searchscope”) = ADS_SCOPE_SUBTREE
    objCommand.Properties(“Cache Results”) = False

    ‘ Treats the computer objects as a set of record cards
    Set objRecordSet = objCommand.Execute
    objRecordSet.MoveFirst
    ‘ Get all the records
    Do Until objRecordSet.EOF
    strInitial = UCase(Left(objRecordSet.Fields(“Name”).Value,2))

    ‘ Filter Computers.
    If strInitial = “FC8” Then

    strComputer = objRecordSet.Fields(“Name”).Value
    strComputer = “CN=”& strComputer

    intCounter = intCounter +1
    Wscript.Echo “Computer Name: ” & strComputer

    strSourceOU = “,OU=Computers,DC=gfoundries,DC=com”
    strDestinationOU = “OU=UNMANAGED,DC=gfoundries,DC=com”

    Set objNewOU = GetObject(“LDAP://” & strDestinationOU)
    Set objMoveComputer = objNewOU.MoveHere _
    (“LDAP://” & strComputer & strSourceOU, strComputer)

    ‘ Next line matches If strInitial
    End if

    objRecordSet.MoveNext

    Loop

    Wscript.Echo intCounter & ” ” & strInitial & ” moved”

    ‘ End of VBScript[/CODE]

    Avatar
    Ossian
    Moderator
    #183940

    Re: Help to create VBScript to change OU

    What is the error you get?

    Double check the path to the computers CONTAINER (not actually an OU) — I think it should be CN=COMPUTERS

    Rems
    Rems
    Moderator
    #227946

    Re: Help to create VBScript to change OU

    Ossian;231861 wrote:
    What is the error you get?

    Double check the path to the computers CONTAINER (not actually an OU) — I think it should be CN=COMPUTERS

    Good catch Tom!

    Run the script below to test if computers are found. The script will not yet moving the computers.
    The next step,, remove the blue colored text and run the script. Verify the computers have moved.

    Code:
    [COLOR=”Blue”]SET oWshShell = createObject(“WScript.shell”)
    ‘ remove this and the above line after testing
    ‘ also – remove the checkpoint somewhere in the script
    ‘ – unremark the 4 rem’d out lines[/COLOR]

    ‘———————————————————————-‘
    ‘ MoveOU.vbs – Script = Not easy.
    ‘ VBScript to Move computers from the Computers to the unmanaged OU
    ‘ Author Trevor March
    ‘———————————————————————-‘

    [COLOR=”blue”]rem[/COLOR] Option Explicit

    Dim objConnection, objCommand, objRecordSet, objNewOU, objMoveComputer
    Dim strComputer, strSourceOU, strDestinationOU
    Dim iCnt

    Dim oRE : Set oRE = New RegExp
    oRE.Global = True : oRE.IgnoreCase = True

    ‘ “^” means “Only match the beginning of a string”
    oRE.Pattern = “^[COLOR=”RED”]FC8[/COLOR]”

    strSourceOU = “[COLOR=”Red”]CN=Computers,DC=gfoundries,DC=com[/COLOR]”
    strDestinationOU = “[COLOR=”red”]OU=UNMANAGED,DC=gfoundries,DC=com[/COLOR]”

    [COLOR=”blue”]rem[/COLOR] Set objNewOU = GetObject(“LDAP://” & strDestinationOU)

    ‘ Creates link to Active Directory
    Const ADS_SCOPE_SUBTREE = 2

    Set objConnection = CreateObject(“ADODB.Connection”)
    Set objCommand = CreateObject(“ADODB.Command”)
    objConnection.Provider = “ADsDSOObject”

    objConnection.Open “Active Directory Provider”
    Set objCOmmand.ActiveConnection = objConnection

    ‘ Selects all the computer objects in the Computers OU
    objCommand.CommandText = _
    “Select Name, Location from ‘LDAP://” & strSourceOU & “‘” _
    & “where objectClass=’computer'”
    objCommand.Properties(“Page Size”) = 1000
    objCommand.Properties(“Timeout”) = 30
    objCommand.Properties(“Searchscope”) = ADS_SCOPE_SUBTREE
    objCommand.Properties(“Cache Results”) = False

    ‘ Treats the computer objects as a set of record cards
    Set objRecordSet = objCommand.Execute
    objRecordSet.MoveFirst

    ‘ Get all the records
    Do Until objRecordSet.EOF

    strComputer = objRecordSet.Fields(“Name”).Value
    If (oRE.test(strComputer) = True) Then
    iCnt = iCnt +1
    strComputer = “CN=” & strComputer

    [COLOR=”Blue”] ‘checkpoint
    oWshShell.popup (“Computer Name: ” & strComputer),1 , iCnt[/COLOR]

    [COLOR=”blue”]rem[/COLOR] Set objMoveComputer = objNewOU.MoveHere _
    [COLOR=”blue”]rem[/COLOR] (“LDAP://” & strComputer & “,” & strSourceOU, strComputer)

    End if

    objRecordSet.MoveNext

    Loop
    [B]objConnection.Close[/B]
    Wscript.Echo iCnt, “computers moved”

    Rems

Viewing 3 posts - 1 through 3 (of 3 total)

You must be logged in to reply to this topic.