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!

Un comentario en «Powershell Bajas de usuario»

Deja una respuesta

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