Eliminar correos electrónicos específicos o correos electrónicos de todos los buzones de Exchange
¿Alguna vez le han pedido que elimine un correo electrónico no deseado de todos los buzones de su entorno Exchange? ¿Alguien envió un correo electrónico a toda la empresa y luego intentó retractarse? O tal vez un nuevo virus llegó a todos los buzones de correo a través de un archivo adjunto. Este escenario tiende a venir a mi mesa con bastante frecuencia, por lo que lo guiaré a través de los pasos para escanear todos los buzones y eliminar un correo electrónico no deseado. Existen diferentes estrategias para lograr esto, pero las siguientes deberían funcionar para sus necesidades.
Todos los ejemplos resaltados utilizan un bucle ForEach con las bases de datos de buzones, ya que los entornos grandes a menudo se quedarán sin memoria al recuperar todos los buzones. Esto supone que tiene menos de 1000 buzones por base de datos. El poder de este comando gira en torno a la consulta de búsqueda y a poder incluir solo los correos electrónicos que se ajusten a sus criterios de acción. Todos los ejemplos suponen que está conectado al Shell de administración de Exchange.
Paso #1: Lo primero que se requiere es una cuenta de usuario con el rol de acceso adecuado para buscar y eliminar. Utilizo una cuenta de servicio segura para realizar estas tareas de modo que no las complete mi propia cuenta. Los dos roles necesarios son Importación y exportación de buzones de correo y Búsqueda de buzones de correo. De forma predeterminada, la función de administración de importación y exportación de buzones de correo no está incluida en ninguno de los grupos de funciones integrados. Como resultado, esto le muestra cómo crear un grupo de roles con los 2 roles requeridos.
New-RoleGroup -Name "Mailbox Scanning" -Roles "Mailbox Import Export", "Mailbox Search" -Members YourServiceAccount
Paso #2a: En este punto podemos buscar un correo electrónico y registrar los resultados, buscar y eliminar los resultados, o ambas cosas. Este ejemplo busca todos los buzones de correo y elimina el correo electrónico según su consulta de búsqueda. La consulta de búsqueda se puede ajustar según sus necesidades y puede encontrar más información en la sintaxis aquí.
$databases = Get-MailboxDatabase
ForEach ($database in $databases) {
$mailboxes = Get-Mailbox -Database $database
ForEach ($mailbox in $mailboxes)
{ Search-Mailbox $mailbox.identity -SearchQuery Subject:'The Subject Of The Email You Want To Delete', From:'The Sender', Received:'Today' -DeleteContent -Force}
}
Paso #2b: Lo siguiente simplemente registrará los resultados de su búsqueda en caso de que desee probar la búsqueda y eliminarla primero.
$databases = Get-MailboxDatabase
ForEach ($database in $databases) {
$mailboxes = Get-Mailbox -Database $database
ForEach ($mailbox in $mailboxes)
{ Search-Mailbox $mailbox.identity -SearchQuery Subject:'The Subject Of The Email You Want To Log', From:'The Sender', Received:'Today' -TargetMailbox administrator -TargetFolder "SearchAndDeleteLog" -LogOnly -LogLevel Full}
}
Paso #2c: Lo siguiente busca en todos los buzones de correo, elimina el correo electrónico y registra los resultados. Cambié la consulta de búsqueda para resaltar la búsqueda de un archivo adjunto llamado "ILoveYou*". Esto buscará cualquier archivo adjunto con ILoveYou en el prefijo del nombre del archivo.
$databases = Get-MailboxDatabase
ForEach ($database in $databases) {
$mailboxes = Get-Mailbox -Database $database
ForEach ($mailbox in $mailboxes)
{ Search-Mailbox $mailbox.identity -SearchQuery attachment:ILoveYou* -TargetMailbox administrator -TargetFolder "SearchAndDeleteLog" -LogOnly -LogLevel Full -DeleteContent -Force}
}
Paso #2d: Lo siguiente eliminará todos los correos electrónicos que coincidan con su consulta de búsqueda, pero le avisará antes de que se realice cada eliminación. Esto se logra eliminando -Force del comando Search-Mailbox.
$databases = Get-MailboxDatabase
ForEach ($database in $databases) {
$mailboxes = Get-Mailbox -Database $database
ForEach ($mailbox in $mailboxes)
{ Search-Mailbox $mailbox.identity -SearchQuery Subject:'The Subject Of The Email You Want To Delete', From:'The Sender' -DeleteContent}
}
Paso 2e: A continuación se destaca un método más simple para entornos con una huella más pequeña de buzones de correo sin la necesidad de recorrer las bases de datos. De forma predeterminada, el tamaño del resultado del comando Get-Mailbox es 1000 buzones. Configurar -ResultSize en Ilimitado nos permite buscar en todos los buzones.
Get-Mailbox -ResultSize Unlimited | Search-Mailbox -SearchQuery Subject:'The Subject Of The Email You Want To Delete', From:'The Sender' -DeleteContent
Paso 2f: Lo siguiente destaca el uso de nombres de servidores en lugar de buzones de correo según la solicitud. Prefiero utilizar bases de datos de buzones de correo ya que normalmente contienen menos usuarios. Si los servidores funcionan mejor en su entorno, puede utilizar el siguiente método:
$servers = Get-MailboxServer
ForEach ($server in $servers) {
$mailboxes = Get-Mailbox -Server $server
ForEach ($mailbox in $mailboxes)
{ Search-Mailbox $mailbox.identity -SearchQuery Subject:'The Subject Of The Email You Want To Delete', From:'The Sender' -DeleteContent}
}
Como siempre, deja un comentario con tu situación y actualizaré la publicación del blog con la solución.