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!