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!

One thought on “Powershell Bajas de usuario

  • 21 de January de 2018 at 20:13
    Permalink

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

    Reply

Leave a Reply

Your email address will not be published.