[ JagoPG Site ]
This publication is more than a year old. The information can be out-dated.

Visual Basic scripts on Win Server 2008

I have been developing for the university lessons some scripting Visual Basic examples, as a guide for those people that are starting to study how to administrate MS Windows systems.

Some commands have cause me trouble, because I did not find any guide that explained correctly how to recover objects of a Organizational Unit, and some syntax that I have learned by trial and error.

FIRST EXAMPLE

Dim I, Admin
Dim UOAmerica, UOArgentina, GGAdmin

Set Dominio = GetObject("LDAP://DC=example,DC=org")

' Create OU America
Set UOAmerica = Dominio.Create("OrganizationalUnit", "OU=America")
UOAmerica.SetInfo

' Create OU Argentina inside OU America
Set UOArgentina = UOAmerica.Create("OrganizationalUnit", "OU=Argentina")
UOArgentina.SetInfo

' Create a Global Group inside OU Argentina
Set GGAdmin = UOArgentina.Create("Group", "CN=GG_Administradores")
GGAdmin.Put "sAMAccountName", "GG_Administradores"
GGAdmin.SetInfo

WScript.echo "Se han creado las OU y el GG."

' Create 5 users
For I = 1 to 5
    Set Admin = UOArgentina.Create("User", "CN=Administrador" & I)
    Admin.Put "sAMAccountName", "Administrador" & I
    Admin.SetInfo
    Admin.SetPassword "b0naerense"
    Admin.AccountDisabled = False
    Admin.SetInfo
Next

WScript.echo "Se han creado administradores en la OU Argentina."

' Add users to the group GG_Administradores
For I = 1 to 5
    Set Admin = GetObject("LDAP://CN=Administrador" & I & ",OU=Argentina,OU=America,DC=example,DC=org")
    GGAdmin.Add Admin.ADsPath
Next

WScript.echo "Los administradores han sido movidos a GG_Administradores."

 SECOND EXAMPLE

Function crearUsuario()
    dim Dominio, Usuario, Nombre
    Set Dominio = GetObject("LDAP://DC=example,DC=org")

    Nombre = InputBox("Introduzca el nombre de usuario.")

    Set Usuario = Dominio.Create("User", "CN=" & Nombre)
    Usuario.Put "sAMAccountName", Nombre
    Usuario.SetInfo
End Function

Function crearGrupo()
    dim Dominio, Grupo, Nombre, Tipo
    Set Dominio = GetObject("LDAP://DC=example,DC=org")

    ' Get name and type
    Nombre = InputBox("Introduzca el nombre de grupo.")
    Tipo = InputBox("Introduzca el tipo de grupo: " & vbNewLine _
        & "1. Grupo de seguridad" & vbNewLine _
        & "2. Grupo global" & vbNewLine _
        & "3. Grupo global del dominio" & vbNewLine _
        & "4. Grupo local" & vbNewLine _
        & "5. Grupo universal" & vbNewLine)

    Set Grupo = Dominio.Create("Group", "CN=" & Nombre)
    Select Case Tipo
        Case 1:
            ' Security Enabled Group
            Grupo.Put "groupType", &H80000000
        Case 2:
            ' Global Group
            Grupo.Put "groupType", &H2
        Case 3:
        Case 4:
            ' Domain Global Group and Local group
            Grupo.Put "groupType", &H4
        Case 5:
            ' Universal Group
            Grupo.Put "groupType", &H8
    End Select

    Grupo.SetInfo
End Function

Function anyadirUsuarioGrupo()
    dim Grupo, Usuario, Nombre

    ' Get group
    Grupo = InputBox("Introduzca el nombre del grupo.")
    Set Grupo = GetObject("LDAP://CN=" & Grupo & ",DC=example,DC=org")

    ' Get user
    Nombre = InputBox("Introduzca el nombre del usuario.")
    Set Usuario = GetObject("LDAP://CN=" & Nombre & ",DC=example,DC=org")

    ' Add user to the group
    Grupo.add Usuario.ADsPath
End Function

Function moverDeUO()
    Dim UODestino, Usuario

    Usuario = InputBox("Introduzca el nombre de usuario")
    UODestino = InputBox("Introduzca el nombre de la Unidad Organizativa Destino")

    ' Get objects and move user from an OU to another
    Set Usuario = GetObject("LDAP://CN=" & Usuario & ",DC=example,DC=org")
    Set UODestino = GetObject("LDAP://OU=" & UODestino & ",DC=example,DC=org")
    UODestino.MoveHere Usuario.ADsPath, Usuario.name
End Function

' Magic begins here
Dim Opc
Do
    Opc = InputBox("1. Crear usuario" _
        & vbNewLine & "2. Crear grupo"_
        & vbNewLine & "3. Añadir usuario a grupo"_
        & vbNewLine & "4. Mover de contenedor (OU) a un usuario"_
        & vbNewLine & "5. Salir", "Seleccione una opcion")

    Select Case Opc
        Case 1:
            crearUsuario()
        Case 2:
            crearGrupo()
        Case 3:
            anyadirUsuarioGrupo()
        Case 4:
            moverDeUO()
    End Select
Loop Until Opc = Null or Opc = 5

THIRD EXAMPLE

Function opc1(p1, p2)
    Dim Domain, Name, Tmp
    Set Domain = GetObject("LDAP://DC=" & p1 & ",DC=" & p2)

    Name = InputBox("Introduzca el nombre de la OU")
    WScript.Echo("Crear la OU en: " & p1 & "." & p2 & "." & Name)

    Set Tmp = Domain.Create("OrganizationalUnit", "OU=" & Name)
    Tmp.SetInfo
End Function

Function opc2(p1, p2)
    Dim OU, Name, Tmp

    Name = InputBox("Introduzca el nombre de la OU primaria")
    Set OU = GetObject("LDAP://OU=" & Name & ",DC=" & p1 & ",DC=" & p2)

    Name = InputBox("Introduzca el nombre de la OU secundaria")
    Set Tmp = OU.Create("OrganizationalUnit", "OU=" & Name)
    Tmp.SetInfo
End Function

Function opc3(p1, p2)
    Dim OU, Name, Tmp, Obj, Str

    Name = InputBox("Introduzca el nombre del contenedor")
    Set OU = GetObject("LDAP://OU=" & Name & ",DC=" & p1 & ",DC=" & p2)

    Str = ""
    For Each Obj in OU
        Str = Str & Obj.CN & vbNewLine
    Next

    WScript.Echo "Listado de Usuarios" & vbNewLine & Str
End Function

Function opc4(p1, p2)
    Dim OU, User, Name, Tmp

    Name = InputBox("Introduzca el nombre de la OU")
    Set OU = GetObject("LDAP://OU=" & Name & ",DC=" & p1 & ",DC=" & p2)

    Name = InputBox("Introduzca el nombre del usuario")
    Set User = GetObject("LDAP://CN=" & Name & ",DC=" & p1 & ",DC=" & p2)

    OU.MoveHere User.ADsPath, User.Name
End Function

Dim Args
Set Args = WScript.Arguments

If Args.Count = 2 Then
    dim Opc

    Do
        Opc = InputBox("Seleccione una operación:" & vbNewLine _
            & "1. Create an Organizational Unit of first level" & vbNewLine _
            & "2. Create an Organizational Unit of second level" & vbNewLine _
            & "3. List users from a container" & vbNewLine _
            & "4. Move user to a Organizational Unit" & vbNewLine _
            & "5. Exit")

        Select Case Opc
            Case 1:
                opc1 Args(0), Args(1)
            Case 2:
                opc2 Args(0), Args(1)
            Case 3:
                opc3 Args(0), Args(1)
            Case 4:
                opc4 Args(0), Args(1)
        End Select

    Loop Until Opc = Null or Opc = 5


Else
    WScript.Echo "Error. Two parameters are required."
End If