Powershell Bajas de usuario

En uno de nuestros clientes nos obligan a realizar las bajas a las 19:00 y el día de fin de año decidí automatizar todo el proceso.

Utilizamos 2008 r2 como DC y Exchange 2010

el siguiente PowerShell realizara lo siguiente.

  • Cambiar password del usuario
  • Movemos al usuario a la OU deshabilitados
  • Eliminar de las listas de distribución del exchange
  • Pediremos si necesitamos redireccion de los correos o no
  • ponemos un mensaje de fuera de la oficina avisando que el usuario ya no trabaja con nosotros.
  • deshabilitamos MAPI / OWA / Activesync

 

El script lo lanzaremos en la Powershell de Exchange por ello importamos el modulo de ActiveDirectory para poder utilizar cmdlets

import-module ActiveDirectory

Preguntas Básicas para la programación del script lanzadas contra las variables que utilizaremos.

los nombres de usuario que se piden son los de inicio de sesión
$hora = Read-Host «¿Hora de inicio?»
$id_usu = read-host «Nombre de usuario»
$password = Read-Host -AsSecureString «introduce el nuevo password»

$id_email = get-aduser -Identity $id_usu -Properties EmailAddress| select EmailAddress
$remitente = Read-Host «¿Tiene reenvio? Y/N»

#en el caso de tener remitente le preguntamos quien es el remitente.
if ($remitente = «y»)
{
$id_remitente = Read-Host «Introduce el ID remitente»

}

Programamos que a X hora empiece el proceso (realizamos un bucle que al cumplirse la hora continúe con el script.

$hora_actual= get-date -Format HH:mm
while ($hora_actual -ne $hora) {
$hora_actual= get-date -Format HH:mm
}

(HH en mayusculas para formato 24h hh para 12h)

Cambiamos el password del usuario
Set-ADAccountPassword $id_usu -NewPassword $password -Reset

Ocultamos al usuario del Address book de exchange

Set-Mailbox -Identity $id_email.EmailAddress -HiddenFromAddressListsEnabled $true

Eliminamos al usuario de la lista de distribución, en mi caso todas se llaman ML_finanzas, ML_marketing, ML_XX

por ello pongo la combinación *ML*

(saca el listado de los grupos)
$groups = Get-DistributionGroup *ML* | Select-Object Name

busca al usuario dentro de las listas y lo elimina con un bucle
ForEach($group in $Groups)
{

Remove-ADGroupMember -identity $group.Name -member $id_usu -confirm:$false;

}

Ponemos un mensaje fuera de lo oficina para ello tenemos que tener un fichero html en la ruta concreta ( en otros clientes cambio variables pero como este tiene varios idiomas lo realizo manualmente.) Ojo con la ruta podeis poner la ruta completa.
$firma = get-content ‘firma.html’
Set-MailboxAutoReplyConfiguration $id_usu -AutoReplyState enabled -ExternalAudience all -InternalMessage $firma -ExternalMessage $firma

Creamos un reenvió a otro usuairo (guarda copia )
if ($remitente = «y»)
{

Set-Mailbox $id_usu -ForwardingAddress $id_remitente -DeliverToMailboxAndForward $True

}

Movemos al usuairo de OU

Buscamos en que ou se encuentra
$identidad= get-aduser -identity $id_usu | select DistinguishedName

movemos a la OU destino
Move-ADObject -Identity $identidad.DistinguishedName -TargetPath «OU=OUT,OU=RCD,DC=RCD,DC=LOCAL»

 

deshabilitamos OWA MAPI Activesync para que la baja se desconecte bien
Set-CASMailbox -Identity $id_usu -ActiveSyncEnabled $false
Set-CASMailbox -Identity $id_usu -OWAEnabled $false
Set-CASMailbox -Identity $id_usu -MAPIEnabled $false

 

 

Código completo
import-module ActiveDirectory
$hora = Read-Host «¿Hora de inicio?»
$id_usu = read-host «Nombre de usuario»
$password = Read-Host -AsSecureString «introduce el nuevo password»

$id_email = get-aduser -Identity $id_usu -Properties EmailAddress| select EmailAddress
$remitente = Read-Host «¿Tiene reenvio? Y/N»

if ($remitente = «y»)
{
$id_remitente = Read-Host «Introduce el ID remitente»

}
$hora_actual= get-date -Format HH:mm
while ($hora_actual -ne $hora) {
$hora_actual= get-date -Format HH:mm
}
#cambio de password

Set-ADAccountPassword $id_usu -NewPassword $password -Reset
#Ocultar de la lista global de direcciones
Set-Mailbox -Identity $id_email.EmailAddress -HiddenFromAddressListsEnabled $true

#grupos ML salir
$groups = Get-DistributionGroup *ML* | Select-Object Name
ForEach($group in $Groups)
{

Remove-ADGroupMember -identity $group.Name -member $id_usu -confirm:$false;

}
#fuera oficina ( ojo con la firma Html )
$firma = get-content ‘firma.html’
Set-MailboxAutoReplyConfiguration $id_usu -AutoReplyState enabled -ExternalAudience all -InternalMessage $firma -ExternalMessage $firma

#remitente

if ($remitente = «y»)
{

Set-Mailbox $id_usu -ForwardingAddress $id_remitente -DeliverToMailboxAndForward $True

}

#mover OU
$identidad= get-aduser -identity $id_usu | select DistinguishedName

Move-ADObject -Identity $identidad.DistinguishedName -TargetPath «OU=OUT,OU=RCD,DC=RCD,DC=LOCAL»

#deshabilitar OWA / ActiveSync / MAPI
Set-CASMailbox -Identity $id_usu -ActiveSyncEnabled $false
Set-CASMailbox -Identity $id_usu -OWAEnabled $false
Set-CASMailbox -Identity $id_usu -MAPIEnabled $false

 

 

dedicado a mi compañero JLeon con el que parimos al engendro

Saludos!

1 Comment found

comments user

hoteles en cali - 8 enero, 2016

Gran tutorial amigo, muy practico apenas me inicio en este mundo soy un junior 😉

Responder

Add Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.