Belirli E-Posta veya E-Postaları Tüm Exchange Posta Kutularından Kaldırma
İstenmeyen bir e-postayı Exchange ortamınızdaki tüm posta kutularından kaldırmanız hiç istendi mi? Birisi tüm şirkete bir e-posta gönderip sonra onu geri çekmeye mi çalıştı? Veya belki de yeni bir virüs, bir ek yoluyla tüm posta kutularına girmiştir. Bu senaryo sıklıkla aklıma geliyor, bu yüzden size tüm posta kutularını tarama ve istenmeyen e-postaları kaldırma adımlarını anlatacağım. Bunu başarmak için farklı stratejiler var ancak aşağıdakiler ihtiyaçlarınıza uygun olacaktır.
Vurgulanan tüm örnekler, posta kutusu veritabanlarıyla birlikte bir ForEach döngüsü kullanır; çünkü büyük ortamlar genellikle tüm posta kutularını alırken bellek yetersiz kalır. Bu, veritabanı başına 1000'den az posta kutunuz olduğunu varsayar. Bu komutun gücü, Arama Sorgusu etrafında döner ve yalnızca eylem kriterlerinize uyan e-postaları ekleyebilmenizi sağlar. Tüm örneklerde Exchange Yönetim Kabuğuna bağlı olduğunuz varsayılmaktadır.
Adım #1: Gerekli olan ilk şey, arama ve silme için uygun erişim rolüne sahip bir kullanıcı hesabıdır. Bu görevlerin kendi hesabım tarafından tamamlanmaması için güvenli bir hizmet hesabı kullanıyorum. Gerekli olan iki rol Posta Kutusunu İçe Aktarma Dışa Aktarma ve Posta Kutusu Arama'dır. Varsayılan olarak, Posta Kutusu İçe Aktarma Dışa Aktarma yönetim rolü yerleşik rol gruplarının hiçbirine dahil değildir. Sonuç olarak bu size gerekli 2 role sahip bir rol grubunun nasıl oluşturulacağını gösterir.
New-RoleGroup -Name "Mailbox Scanning" -Roles "Mailbox Import Export", "Mailbox Search" -Members YourServiceAccount
Adım #2a: Bu noktada bir e-posta arayabilir ve sonuçları günlüğe kaydedebilir, sonuçları arayabilir ve silebiliriz veya her ikisini birden yapabiliriz. Bu örnek tüm posta kutularını arar ve arama sorgunuza göre e-postayı siler. Arama sorgusu ihtiyaçlarınıza göre ayarlanabilir ve burada söz dizimi hakkında daha fazla bilgi bulabilirsiniz.
$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}
}
Adım #2b: Önce aramayı test etmek ve silmek istemeniz durumunda, aşağıdakiler basitçe aramanızın sonuçlarını günlüğe kaydedecektir.
$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}
}
Adım #2c: Aşağıdaki tüm posta kutularını arar ve hem e-postayı kaldırır hem de sonuçları günlüğe kaydeder. 'ILoveYou*' adlı bir ekin aranmasını vurgulamak için Arama Sorgusunu değiştirdim. Bu, dosya adının ön ekinde ILoveYou yazan herhangi bir eki arayacaktır.
$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}
}
Adım #2d: Aşağıdaki, arama sorgunuzla eşleşen tüm e-postaları silecektir ancak her silme işlemi gerçekleşmeden önce size bilgi verecektir. Bu, Posta Kutusunu Ara komutundan -Force komutunun kaldırılmasıyla gerçekleştirilir.
$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}
}
Adım #2e: Aşağıda, veritabanları arasında döngü yapmaya gerek kalmadan, posta kutularının daha az yer kapladığı ortamlar için daha basit bir yöntem vurgulanmaktadır. Varsayılan olarak Get-Mailbox komutunun sonuç boyutu 1000 posta kutusudur. -ResultSize'ı Sınırsız olarak ayarlamak tüm posta kutularında arama yapmamızı sağlar.
Get-Mailbox -ResultSize Unlimited | Search-Mailbox -SearchQuery Subject:'The Subject Of The Email You Want To Delete', From:'The Sender' -DeleteContent
Adım #2f: Aşağıda, isteğe göre posta kutuları yerine sunucu adlarının kullanılması vurgulanmaktadır. Genellikle daha az kullanıcı içerdikleri için posta kutusu veritabanlarını kullanmayı tercih ediyorum. Sunucular ortamınızda daha iyi çalışıyorsa aşağıdaki yöntemi kullanabilirsiniz:
$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}
}
Her zaman olduğu gibi, senaryonuzla ilgili bir yorum bırakın; ben de blog yazısını çözümle güncelleyeceğim.