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