miércoles, 23 de septiembre de 2015

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


La última parte de este articulo/trilogia es la parte donde recogemos todos los datos que introducimos en los elementos y damos el alta del usuario en sí y mostramos un output amigable en un elemento tipo textbox.

El primer paso es crear el textbox:

# Add a text box to the form  ==================================
$objOutputBox = New-Object System.Windows.Forms.TextBox
$objOutputBox.Location = New-Object System.Drawing.Size(680,40)
$objOutputBox.Size = New-Object System.Drawing.Size(460,500)
$objOutputBox.Multiline = $True
$objOutputBox.Font = New-Object System.Drawing.Font("Courier New", "8.5")
$objOutputBox.Wordwrap = $True
$objOutputBox.ReadOnly = $True
$objOutputBox.ScrollBars = [System.Windows.Forms.ScrollBars]::Vertical
$objForm.Controls.Add($objOutputBox)



Usaremos el nuevo objeto para mostrar toda la información y los pasos que estamos dando en el proceso de creación del usuario.

El siguiente paso es añadir un boton de OK, para lanzar el procedimiento de crear el usuario.

# Add OK Button ========================================
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(500,720)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = "OK"
$OKButton.Add_Click(
{
# TODO: Substituir por procedimiento de alta de usuario
$objForm.Close()
})
$objForm.Controls.Add($OKButton)

I el aspecto final es este:


En la procedimiento al ejecutar el Click es donde devemos introducir nuestro script para el alta de usuario que deve recoger todos los datos del formulario y teniendo en cuenta los check que haya marcados, realizar unas tareas u otras. Como esta es la madre del cordero de todo este formulario, aquí os dejo un ejemplo de el script que usamos nosotros:

# TODO: Substituir por procedimiento de alta de usuario
$country = $objEnviromentsListbox.SelectedItem
$name = $objTextBoxName.Text
$surname = $objTextBoxSurname.Text
$username = $objTextBoxUsername.Text
$password = $objTextBoxPassword.Text
$alias = $objTextBoxAlias.Text
$database = $objMailDatabaseListbox.SelectedItem
$template = $objUserTemplateListbox.SelectedItem
$groups = Invoke-Expression "get-AdUser -Identity $template -Properties memberof | select-object -ExpandProperty memberof"
$enabledAD = $objADCheckbox.Checked
$enabledExchange = $objMailCheckbox.Checked
$enabledLync = $objLyncCheckbox.Checked
$enabledGroup = $objGroupCheckbox.Checked
$profpath = "\\fileserver\prof$country`$\profile\$username"
$homepath = "\\fileserver\prof$country`$\home\$username"
$objOutputBox.Text = " Los datos del nuevo usuario son:
Nuevo uusuario es $name $surname
Su usuario es $username y el password $password
Su Alias de email es $alias y su direccion de email $alias@dominio.com
La base de datos de correo es $database
Y usara los grupos de la plantilla $template" $objOutputBox.Text += "`r`n  "
$objOutputBox.Text += "`r`n Profile Path = $profpath"
$objOutputBox.Text += "`r`n Profile Path = $homepath"
if ($enabledAD) {
$upn = "$username" + "$intdomain"
$completename = "$name $surname"
$objOutputBox.Text +=  "`r`n  Creando AD User..."
new-aduser -Name $completename -GivenName $name -Surname $surname -UserPrincipalName $upn -Path $altaOU -SamAccountName $username -AccountPassword (ConvertTo-SecureString $password -AsPlainText -Force) -Enabled $true
$objOutputBox.Text +=  "`r`n  Esperar durante 5 segundos los cambios del AD"
Start-Sleep -s 5
if($enabledGroup)
{ $objOutputBox.Text +=  "`r`n  Habilitar perfil de TS ..."
$objOutputBox.Text += get-AdUser -Identity $template -Properties memberof | select-object -ExpandProperty memberof | Add-ADGroupMember -Members $username
$adUser = Get-ADUser $username | select -ExpandProperty disting*
$adUser = [ADSI]"LDAP://$ADUser"
$adUser.psbase.invokeset('TerminalServicesProfilePath',$profpath)
$adUser.psbase.invokeSet('TerminalServicesHomeDirectory',$homepath)
$adUser.psbase.invokeSet('TerminalServicesHomeDrive',"Y:")
$adUser.setinfo()
# Pause 10 for AD changes
$objOutputBox.Text += "`r`n  Esperar durante 10 segundos para la creación del perfil de TS"
Start-Sleep -s 10 } if($enabledExchange)
{
$objOutputBox.Text +=  "`r`n  Habilitando Mailbox..."
$objOutputBox.Text += enable-mailbox -Identity $upn -Database $database -Alias $alias
# Pause for 30 seconds for AD
$objOutputBox.Text +=  "`r`n  Esperar durante 30 segundos la creación del Mailbox"
Start-Sleep -s 30
if($enabledLync)
{
$objOutputBox.Text +=  "`r`n  Habilitando Lync ..."
$objOutputBox.Text += Get-mailbox -identity $completename | Enable-csuser -registrarpool $registrar -sipaddresstype EmailAddress
$objOutputBox.Text +=  "`r`n  Lync Habilitado"
}
} }
else
{
$objOutputBox.Text += "`r`n  NO SE HA MARCADO LA OPCION DE CREAR USUARIO DE AD"
}
Lo primero que hace el script es leer todos los elementos de entrada de datos del formulario y guardarlos dentro de variables. Despues mediante los CheckBox y con las expresiones de condicion IF..THEN.. ejecutamos los comandos para crear el usuario. En un caso completo hariamos de forma simplificada:

  1. Crear el usario en AD mediante New-ADUser
  2. Añadimos los grupos de la plantilla mediante el comando Get-ADUser $template | Add-ADGroupMember $username
  3. Creamos el perfil de Terminal Server con el InvokeSet
  4. Habilitamos el buzón de Exchange en la base de datos que hemos seleccionado Enable-Mailbox .
  5. Habilitamos el servicio de Lync usando la direccion de email como SIP Address Enable-CSUser .

El procedmiento es sencillo y el flujo de condiciones es bastante intuituvo, se puede modificar y adaptar a cualquier empresa.

Lo más importante y que hay que tener en cuenta, es que para ejecutar este formulario y poder dar de alta los usuario y todos sus servicios hay que tener sesiones abiertas con todas las consolas de gestión de estos servicio.



No hay comentarios:

Publicar un comentario