
Search-Mailbox komutu; mailboxlar üzerinde search, mail silme ve taşıma işlemlerini gerçekleştirebildiğimiz Exchange yönetimi yapanlar için faydalı bir komuttur. Özellikle mail gateway’e yakalanmadan mailboxlara ulaşan phissing ya da virüs/atak içerikli maillerin yayılma durumunu incelemek ve toplu olarak silmek amacıyla kullanılabilir. Ayrıca iç-dış denetimlerde gerekli mailleri incelemek ya da Bilgi Güvenlik ekiplerinin istediği bir mailbox temizliğini yapmak için de kullanılabilir bir yöntemdir.
Örnek bir komutla başlayıp, kullanılan parametreler hakkında bilgi aktarmaya çalışacağım. Yazdığım komutların hepsini deneyerek sonuçları paylaşıyorum. Umarım sizler için faydalı olur ve makale sonunda ihtiyacınız olan scripti kendiniz düzenleyebilirsiniz.
Search-Mailbox -Identity ekrem.ersoy -SearchQuery ‘Subject:”pstpst”‘ -TargetMailbox AnalizAlani -TargetFolder “yenilog” -LogOnly -LogLevel Full
Yukarıdaki komut ile ekrem.ersoy mailbox’ı üzerinde subject’i pstpst olan tüm maillerin listesi,
AnalizAlani mailboxı üzerindeki yenilog klasörü altına log olarak oluşturuluyor.
İlgili klasördeki oluşan logu incelediğimizde ziplenmiş eki olan bir mail göreceksiniz. Bu dosya içeriğinde aşağıdaki gibi mailleri analiz yapabileceğiniz bir CSV dosyası mevcut. Aşağıdaki örnek dosyada görüldüğü gibi arama yaptığınız mailin hangi mailboxta, hangi folder altında olduğunu, ne zaman, kim tarafından gönderildiğini rahatlıkla görebiliyorsunuz.

Bu maillerin kopyasını almak için komutunuzdan sadece -LogOnly parametresini silmemiz yeterli oluyor.
Search-Mailbox -Identity ekrem.ersoy -SearchQuery ‘Subject:”pstpst”‘ -TargetMailbox
AnalizAlani -TargetFolder “copymail” -LogLevel Full
Yukarıdaki komutu kullandığımızda, belirttiğimiz -TargetFolder klasörüne kişi ve mailin bulunduğu alt folder’ların görülebileceğini şekilde mail kopyalarını oluşturuyor. TargetFolder parametresinde belirttiğiniz klasör normalde mailbox üzerinde yoksa otomatik olarak oluşturulmaktadır. Aşağıda çalıştırılmış komutun örnek görüntüsünü paylaşıyorum.

Mailleri silmek için var olan komutumuza -DeleteContent parametresini eklememiz yeterli olacaktır. Fakat bu parametreyi kullanabilmek için Exchange Management Shell’i çalıştırdığımız userda Mailbox Import Export Management rolünün atanmış olması gerekmektedir. Aşağıdaki komut ile rolü atayabilirsiniz.
New-ManagementRoleAssignment -Role “Mailbox Import Export” -User User_Alias
Yetki atandıktan sonra -DeleteContent komutuyla komutumuzu kullanabiliriz. Daha önce ilgili rol için yetki aldıysanız, tekrar yetki atamanıza gerek bulunmamaktadır. TargetMailbox ve TargerFolder parametreleriyle kullanıp silinen mailleri bir alanda toplamanız ve sonrasında bu alandan silmeniz kontrollü bir temizlik yapmanızı sağlayacaktır.
Search-Mailbox -Identity ekrem.ersoy -SearchQuery ‘Subject:”pstpst”‘ -TargetMailbox
AnalizAlani -TargetFolder “copymail” -LogLevel Full -DeleteContent

Silme operasyonu öncesinde işlem için onayınızı istemektedir. Bu onay mailbox seviyesinde olup, içerik maillerini tek tek sormayacaktır. Tam burada toplu olarak tüm mailboxlarda ya da belirli mailboxlarda bu operasyonu gerçekleştirmek için komutumuzu nasıl düzenlememiz gerektiğinden de bahsedeyim.
Get-Mailbox komutuyla mailboxlarımızı çağırdıktan sonra “|” sonrasına komutumuzu yazarak çağırdığımız mailboxlar için operasyonu yapabiliriz. Burada artık -Identity parametresini kullanmamıza gerek kalmayacaktır.
Tüm mailboxlar için:
Get-Mailbox -Resultsize unlimited | Search-Mailbox -SearchQuery ‘Subject:”pstpst”‘ -TargetMailbox AnalizAlani -TargetFolder “copymail” -LogLevel Full -DeleteContent
EmailAddresi @domainname.com.tr ile bitenler için:
Get-Mailbox -ResultSize unlimited | where {$_.Emailaddresses -like “*@domain.com.tr”} | Search-Mailbox -SearchQuery ‘Subject:”pstpst”‘ -TargetMailbox AnalizAlani -TargetFolder “copymail” -LogLevel Full -DeleteContent
Komutun işlevselliğini belirttikten sonra bizim özel olarak belli bir mail’i search edip, çıkartabilmemiz için gerekli filtrelemeyi yaptığımız -SearchQuery alanının kullanımından bahsetmek istiyorum. Gönderici adresi, mailin konusu ve gönderim tarihi genel olarak size nokta atışı bir mail taraması için yeterli olacaktır. Daha detaylı kullanım için buradan Microsoftun sayfasına erişebilirsiniz.
Query alanını:
-SearchQuery ‘from:”Gönderici_Adresi” Subject:”Konu” Received>=12/31/2019
ya da
-SearchQuery ‘from:”Gönderici_Adresi” -and Subject:”Konu” -and Received>=12/31/2019
şeklinde kullanabilirsiniz. Tarih kısmında sunucunuzda tarih yapısını değiştirdiyseniz uygun şekilde düzenlemeniz gerekebilir.
Özellikle -DeleteContent parametreli komutlar kullanırken komuttan ve işleminizden emin olmanızı ve subject içeriğini * (Subecj:”*arama*” gibi) ile genişletmemenizi sorun yaşamamanız adına tavsiye ederim. Umarım faydalı bir çalışma olmuştur.