Recherche de site Web

Supprimer un ou plusieurs e-mails spécifiques de toutes les boîtes aux lettres Exchange


Vous a-t-on déjà demandé de supprimer un e-mail indésirable de toutes les boîtes aux lettres de votre environnement Exchange ? Quelqu'un a-t-il envoyé un e-mail à toute l'entreprise et a ensuite tenté de le rétracter ? Ou peut-être qu'un nouveau virus s'est propagé dans toutes les boîtes aux lettres via une pièce jointe. Ce scénario a tendance à me revenir assez souvent, je vais donc vous guider à travers les étapes d'analyse de toutes les boîtes aux lettres et de suppression d'un e-mail indésirable. Il existe différentes stratégies pour y parvenir, mais celles qui suivent devraient répondre à vos besoins.

Tous les exemples mis en évidence utilisent une boucle ForEach avec les bases de données de boîtes aux lettres, car les grands environnements manquent souvent de mémoire pour récupérer toutes les boîtes aux lettres. Cela suppose que vous disposez de moins de 1 000 boîtes aux lettres par base de données. La puissance de cette commande tourne autour de la requête de recherche et de la possibilité d'inclure uniquement les e-mails qui correspondent à vos critères d'action. Tous les exemples supposent que vous êtes connecté à Exchange Management Shell.

Étape 1 : La première chose requise est un compte utilisateur avec le rôle d'accès approprié pour rechercher et supprimer. J'utilise un compte de service sécurisé pour effectuer ces tâches afin qu'elles ne soient pas effectuées par mon propre compte. Les deux rôles requis sont Mailbox Import Export et Mailbox Search. Par défaut, le rôle de gestion Mailbox Import Export n’est inclus dans aucun des groupes de rôles intégrés. En conséquence, cela vous montre comment créer un groupe de rôles avec les 2 rôles requis.


New-RoleGroup -Name "Mailbox Scanning" -Roles "Mailbox Import Export", "Mailbox Search" -Members YourServiceAccount

Étape n°2a : À ce stade, nous pouvons soit rechercher un e-mail et enregistrer les résultats, rechercher et supprimer les résultats, ou les deux. Cet exemple recherche toutes les boîtes aux lettres et supprime l'e-mail en fonction de votre requête de recherche. La requête de recherche peut être ajustée en fonction de vos besoins et plus d'informations sur la syntaxe peuvent être trouvées ici.

$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}
}

Étape n°2b : Ce qui suit enregistrera simplement les résultats de votre recherche au cas où vous souhaiteriez tester la recherche et la supprimer en premier.

$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}
}

Étape n°2c : ce qui suit recherche toutes les boîtes aux lettres et supprime l'e-mail et enregistre les résultats. J'ai modifié la requête de recherche pour mettre en évidence la recherche d'une pièce jointe nommée « ILoveYou* ». Cela recherchera toute pièce jointe avec ILoveYou comme préfixe du nom de fichier.

$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}
}

Étape n°2d : Ce qui suit supprimera tous les e-mails correspondant à votre requête de recherche, mais vous demandera avant chaque suppression. Ceci est accompli en supprimant le -Force de la commande 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}
}

Étape 2e : ce qui suit met en évidence une méthode plus simple pour les environnements avec une plus petite empreinte de boîtes aux lettres sans avoir besoin de parcourir les bases de données. Par défaut, la taille du résultat de la commande Get-Mailbox est de 1 000 boîtes aux lettres. Définir -ResultSize sur Unlimited nous permet de rechercher toutes les boîtes aux lettres.

Get-Mailbox -ResultSize Unlimited | Search-Mailbox -SearchQuery Subject:'The Subject Of The Email You Want To Delete', From:'The Sender' -DeleteContent

Étape n°2f : les points suivants mettent en évidence l'utilisation des noms de serveur au lieu des boîtes aux lettres selon la demande. Je préfère utiliser des bases de données de boîtes aux lettres car elles contiennent généralement moins d'utilisateurs. Si les serveurs fonctionnent mieux dans votre environnement, vous pouvez utiliser la méthode suivante :

$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}
}

Comme toujours, laissez un commentaire avec votre scénario et je mettrai à jour le billet de blog avec la solution.

Articles connexes