miércoles, 23 de septiembre de 2015

Formulario Powershell para alta de usuarios (parte 1/3)


Estoy descubriendo la herramienta genial que es Powershell .

Como comente en el post anterior , estamos preparando una serie de scripts para automatizar la gestión de usuarios. Investigando un poco sobre como hacer estos scripts, descubrí que en PowerShell han implementado una librería para hacer un interfaz gráfico: Forms .

Después de revisar algunos tutoriales del technet, dedicí usar lo aprendido para hacer una aplicación de alta de usuarios con esta librería.

El objetivo de la aplicación es completar en un solo formulario el Alta de un usuario en Active Directory, Exchange, Lync y agregar los grupos necesarios para poder acceder a las aplicaciones corporativas de su departamento.

El script de la aplicación nos deberá permitir seleccionar lo siguiente:

  • Si queremos dar de alta la cuenta de Active Directory, de Exchange, de Lync y añadir los Grupos.
  • Escoger al entorno o país al que pertenecerá el usuario.
  • Escoger la base de datos donde se creara el buzón de Exchange
  • Escoger la plantilla que usaremos para añadir los grupos. 


Para ello necesitamos acceso a los diferentes powershell de estos servicios, que ya resolvimos en el post de Automatizar el inicio de sesiones remotas en PowerShell y unas plantillas de usuarios que dejaremos en una OU.




El primer paso es definir las constantes que vamos a usar:

# Static Entries ==========================================
$enviroments = "ESP","MEX","USA"
$mailboxserver = "MAILSERVER"
$templateBase = "ou=Plantillas,ou=Altas,dc=dominio,dc=local"
$altaOU = "ou=Altas,dc=dominio,dc=local"
$intdomain = "@dominio.local"
$lyncserver = "lync2013.dominio.local"
$homedrive = "Z"

Estamos definiendo:
  • enviroment: la uso para distinguir el país al que pertenezera el usuario, ya que aplico unos parametros u otros segun su pais.
  • mailboxserver: bastante claro, no? servidor de Exchange.
  • templateBase: es la OU donde dejaremos las plantillas de usuario con los grupos correspondientes. Solo dejaremos las plantillas en esta OU.
  • altaOU: en esta OU dejaremos las usuarios creados. 
  • intdomain: el dominio dominio local.
  • lyncserver: sí, no? 
  • homedrive: unidad local del usuario donde mapearemos la carpeta personal del servidor de ficheros. 
El siguiente paso es definir el propio GUI del formulario:



# Set up the form ========================================
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
$objForm = New-Object System.Windows.Forms.Form
$objForm.Text = "Formulario de alta de usuarios"
$objForm.Size = New-Object System.Drawing.Size(1200,800)
$objForm.StartPosition = "CenterScreen"
$objForm.KeyPreview = $True

Aquí definimos una venta de 1200x800 pixels para colocar todos los campos del formulario. El resto de campos los ordeno usando estas medidas, si a alguien no le van bien este tamaño y decide cambiarlo, que lo tenga en cuenta a la hora de colocar el resto de elementos. 

Añadiremos un título al formulario y ejecutaremos el script para ver como se ve:
# Add Title =============================================
$title = New-Object System.Windows.Forms.Label
$title.Text = "Formulario de alta de usuarios"
$title.AutoSize = $True
$objForm.Controls.Add($title)
Y al final del script añadimos la siguientes linias. Entre estas y la anterior es donde introduciremos todos los elementos del formulario, las funciones y los procedimientos. 

# Activate the form (At the End) ==============================
$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()

Y este es el resultado:


Vamos a empezar a añadir elementos. El primero que vamos a introducir es un boton para salir de la aplicación, un Cancelar , que cierre el formulario al hacer click.

# Add Cancel Button ======================================
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Size(700,720)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = "Cancelar"
$CancelButton.Add_Click({$objForm.Close()})
$objForm.Controls.Add($CancelButton)

El siguiente es una lista en la que queremos seleccionar el entorno al que pertenece el usuario. Hay que añadir el siguiente texto ANTES de la activación del formulario: 
# Add the list of enviroments ==================================
$objLabelEnviroment = New-Object System.Windows.Forms.Label
$objLabelEnviroment.Location = New-Object System.Drawing.Size(50,40)
$objLabelEnviroment.Size = New-Object System.Drawing.Size(149,20)
$objLabelEnviroment.Text = "Escoge un entorno:"
$objForm.Controls.Add($objLabelEnviroment)
$objEnviromentsListbox = New-Object System.Windows.Forms.Listbox
$objEnviromentsListbox.Location = New-Object System.Drawing.Size(50,60)
# $objEnviromentsListbox.Size = New-Object System.Drawing.Size(260,320)
$objForm.Controls.Add($objEnviromentsListbox)
foreach ($enviroment in $enviroments)
{
[void] $objEnviromentsListbox.Items.Add($enviroment)
}
El primer objecto objLabelEnviroment es una etiqueta de texto que situaremos justo encima del segundo objeto objEnviromentListbox, que es la lista en si. Este es el resultado:


Ahora añadiremos los campos de Nombre, Apellido, Usuario, Contraseña y Alias de correo en objetos textbox:

# Add Name TextBox ======================================
$objLabelName = New-Object System.Windows.Forms.Label
$objLabelName.Location = New-Object System.Drawing.Size(250,40)
$objLabelName.Size = New-Object System.Drawing.Size(280,20)
$objLabelName.Text = "Introduzca el nombre:"
$objForm.Controls.Add($objLabelName)
$objTextBoxName = New-Object System.Windows.Forms.TextBox
$objTextBoxName.Location = New-Object System.Drawing.Size(250,60)
$objTextBoxName.Size = New-Object System.Drawing.Size(260,20)
$objForm.Controls.Add($objTextBoxName)
# Add Surname TextBox ====================================
$objLabelSurname = New-Object System.Windows.Forms.Label
$objLabelSurname.Location = New-Object System.Drawing.Size(250,90)
$objLabelSurname.Size = New-Object System.Drawing.Size(280,20)
$objLabelSurname.Text = "Introduzca el/los apellidos:"
$objForm.Controls.Add($objLabelSurname)
$objTextBoxSurname = New-Object System.Windows.Forms.TextBox
$objTextBoxSurname.Location = New-Object System.Drawing.Size(250,110)
$objTextBoxSurname.Size = New-Object System.Drawing.Size(260,20)
$objForm.Controls.Add($objTextBoxSurname)
# Add User Acount Name TextBox ==============================
$objLabelUsername = New-Object System.Windows.Forms.Label
$objLabelUsername.Location = New-Object System.Drawing.Size(250,140)
$objLabelUsername.Size = New-Object System.Drawing.Size(280,20)
$objLabelUsername.Text = "Introduzca el nombre de usuario:"
$objForm.Controls.Add($objLabelUsername)
$objTextBoxUsername = New-Object System.Windows.Forms.TextBox
$objTextBoxUsername.Location = New-Object System.Drawing.Size(250,160)
$objTextBoxUsername.Size = New-Object System.Drawing.Size(260,20)
$objForm.Controls.Add($objTextBoxUsername)

# Add Passowrd TextBox ===================================
$objLabelPassword = New-Object System.Windows.Forms.Label
$objLabelPassword.Location = New-Object System.Drawing.Size(250,190)
$objLabelPassword.Size = New-Object System.Drawing.Size(280,20)
$objLabelPassword.Text = "Introduzca el password:"
$objForm.Controls.Add($objLabelPassword)
$objTextBoxPassword = New-Object System.Windows.Forms.TextBox
$objTextBoxPassword.Location = New-Object System.Drawing.Size(250,210)
$objTextBoxPassword.Size = New-Object System.Drawing.Size(260,20)
$objForm.Controls.Add($objTextBoxPassword)
# Add Email Alias TextBox ==================================
$objLabelAlias = New-Object System.Windows.Forms.Label
$objLabelAlias.Location = New-Object System.Drawing.Size(250,240)
$objLabelAlias.Size = New-Object System.Drawing.Size(280,20)
$objLabelAlias.Text = "Introduzca el alias de correo:"
$objForm.Controls.Add($objLabelAlias)
$objTextBoxAlias = New-Object System.Windows.Forms.TextBox
$objTextBoxAlias.Location = New-Object System.Drawing.Size(250,260)
$objTextBoxAlias.Size = New-Object System.Drawing.Size(260,20)
$objForm.Controls.Add($objTextBoxAlias)
Como en el objeto lista, en este insertamos una etiqueta antes encima de cada textbox. Y esto va cogiendo forma:



No hay comentarios:

Publicar un comentario