PowerShell ile Exchange Server'daki (Microsoft 365) Kullanıcı Posta Kutularından E-postaları Arayın ve Silin


Exchange Server'da, arama yapmak için Search-Mailbox veya New-ComplianceSearch PowerShell cmdlet'lerini (Exchange Server ve Exchange Online/Microsoft 365'in daha yeni sürümlerinde mevcuttur) kullanabilirsiniz. kullanıcı posta kutularından e-posta öğelerini silin. Örneğin, bir kullanıcı yanlışlıkla özel verileri kuruluştaki iş arkadaşlarına gönderdi ve iletiyi Outlook'ta geri çağırmak için zamanı olmadı. Bilgi güvenliği departmanı, bir Exchange yöneticisinin bu özel e-postayı Exchange kuruluşunuzdaki/kiracınızdaki tüm kullanıcı posta kutularından silmesini şart koşuyor.

Makale, kurum içi Exchange Server 2019/2016/2013 ve 2010 ile bulut tabanlı Exchange Online (Microsoft 365) için geçerlidir.

Exchange Posta Kutularını Aramak İçin Gerekli İzinler

Posta kutusu öğelerini arayan ve silen yönetici hesabına aşağıdaki roller atanmalıdır:

  • Posta Kutusu İçe Aktarma Dışa Aktarma

  • Posta Kutusu Araması

Rolleri EAC veya PowerShell kullanarak atayabilirsiniz. Şirket içi Exchange Sunucunuza PowerShell kullanarak bağlanın ve şu komutları çalıştırın:

New-ManagementRoleAssignment -User j.anderson -Role "Mailbox Import Export"
New-ManagementRoleAssignment -User j.anderson -Role "Mailbox Search”

Exchange Online'da aşağıdaki rolleri atamanız gerekir:

Add-RoleGroupMember "Discovery Management" -member max@a-d.site
New-RoleGroup "Mailbox Import-Export Management" -Roles "Mailbox Import Export"
Add-RoleGroupMember "Mailbox Import-Export Management" -Member max@a-d.site

Hesabınızı Microsoft 365 Uyumluluk Merkezi'ndeki eDiscovery Admins grubuna ekleyin

İpucu. Exchange Online'a bağlanmak için Exchange Online PowerShell v2 (EXO V2) modülünü kullanabilirsiniz.

Roller atandıktan sonra PowerShell oturumunu yeniden başlatın.

Arama-Posta Kutusu: Exchange Kullanıcı Posta Kutularından Mesaj Arama ve Silme

Kullanıcı posta kutularındaki e-posta öğelerini aramak için Exchange Admin Center (EAC) web arayüzünü veya Search-Mailbox PowerShell cmdlet'ini kullanabilirsiniz. Bu komut, posta kutularındaki e-postaları belirli kriterlere göre aramanıza, bulunan öğeleri başka bir posta kutusuna kopyalamanıza veya kaldırmanıza olanak tanır.

Bir kullanıcının posta kutusunda belirli bir konuya sahip e-postaları aramak için şu komutu çalıştırın:

Search-Mailbox -Identity k.peterson -SearchQuery 'Subject:"Annual Report"'

Exchange organizasyonundaki tüm posta kutularını aramak için aşağıdaki komutu kullanın:

Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery 'Subject:"Annual Report"'

Exchange Online'da (Microsoft 365) Search-Mailbox cmdlet'ini kullanırken bir uyarı görünür:

WARNING:  On July 1, 2020, the Search-Mailbox cmdlet is being retired and Microsoft Support will no longer provide assistance.  See https://go.microsoft.com/fwlink/?linkid=2113221 to learn more. WARNING: The Search-Mailbox cmdlet returns up to 10000 results per mailbox if a search query is specified. To return more than 10000 results, use the New-MailboxSearch cmdlet or the In-Place eDiscovery & Hold console in the Exchange Administration Center.

Microsoft, daha güçlü olanı kullanmanızı önerir

New-ComplianceSearch

Ve

New-ComplianceSearchAction

posta kutusu arama cmdlet'leri (aşağıda ele alınmıştır).

Arama sonuçlarını belirli bir posta kutusuna ve klasöre kopyalamak için TargetMailbox veya TargetFolder parametrelerini kullanın. Bu, arama tamamlandıktan sonra bulunan e-postaları Outlook'ta manuel olarak görüntülemenize olanak tanır. Posta kutuları listesinde (users.txt dosyasında verilen) e-posta mesajlarını aramanız ve bulunan öğeleri belirli posta kutusundaki klasöre kopyalamanız gerektiğini varsayalım:

get-content users.txt | Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery 'Subject:"Annual Report"' -TargetMailbox sec_dept -TargetFolder "ExchSearchResult”

-LogOnly -LogLevel Full seçeneği, arama sonuçlarının yalnızca öğeler bir hedef posta kutusuna kopyalanmadan veya iletiler silinmeden tahmin edilmesi gerektiği anlamına gelir. Bu bağımsız değişken kullanılırsa, arama sonuçlarını içeren bir rapor belirtilen hedef posta kutusuna gönderilir. Rapor, arama ölçütlerini karşılayan posta kutularını listeleyen arşivlenmiş bir CSV dosyasıdır.

Lütfen alınan raporun Okuma Durumu ( Okuma Durumu) e-posta mesajına sahip olduğunu unutmayın.

Read: True/False

).

-EstimateResultOnly parametresini kullanarak arama sonuçlarını tahmin edebilirsiniz. Lütfen, bu seçeneği kullanırken bir hedef posta kutusu veya klasör belirtmeniz gerekmediğini unutmayın.

Get-Mailbox | Search-Mailbox -SearchQuery 'Subject:"report"' -EstimateResultOnly|select Identity,ResultItemsCount,ResultItemsSize| Where-Object ResultItemsCount -gt 0

Bulunan e-posta öğelerini silmek için -DeleteContent parametresini kullanın. Onay istemlerini atlamak için -Force parametresini ekleyin

İlgili Exchange sunucusundaki tüm posta kutularındaki k.peterson@a-d.site göndericisinden gelen tüm e-posta mesajlarını silelim:

Get-Mailbox -Server berl-ex1 -ResultSize unlimited | Search-Mailbox -SearchQuery 'from:"k.peterson@a-d.site"' -DeleteContent -Force

-DeleteContent parametresini kullanarak posta kutularından e-posta öğelerini kaldırmadan önce, bulunan e-postaları

-EstimateResultOnly

veya

-LogOnly

argümanlar.

Yalnızca silinen öğeleri aramak için -SearchDumpsterOnly parametresini ekleyin (silinen öğeler arasında aramayı hariç tutmak için,

-SearchDumpster:$false

argüman). Bir arşiv posta kutusunu arama sonucundan hariç tutmanız gerekirse, -DoNotIncludeArchive parametresini kullanın.

Search-Mailbox cmdlet'inin önemli bir sınırlaması vardır: yalnızca 10.000 öğe döndürebilir. Bu sınır aşılırsa şu hatayı döndürür:

Sending data to a remote command failed with the following error message: The total data received from the remote client exceeded allowed maximum. Allowed maximum is 524288000.

Daha fazla öğe silmek için Search-Mailbox cmdlet'ini birkaç kez çalıştırmanız veya posta kutularını posta kutusu veritabanlarına veya Exchange sunucularına göre gruplara ayırmanız gerekir.

Get-Mailbox -Database berl-ex1 | Search-Mailbox -SearchQuery 'from:spam@spambot.org' -DeleteContent -Force

Başka bir Search-Mailbox cmdlet sorunu, düşük performansıdır. Büyük bir şirket söz konusu olduğunda, arama birkaç gün sürebilir. Exchange Server ve Microsoft 365'in modern sürümlerinde, e-posta aramak için New-ComplianceSearch cmdlet'ini (aşağıda ele alınmıştır) kullanmak en iyisidir.

Exchange Posta Kutuları için Anahtar Kelime Arama Örnekleri

SearchQuery parametresini kullanarak e-posta öğelerini bulmak için arama sorgusu örneklerine bakalım. SearchQuery parametresi, sorguyu KQL biçiminde (Anahtar Kelime Sorgulama Dili) işler https://docs.microsoft.com/en-us/sharepoint/dev/general-development/keyword-query-language-kql -sözdizimi-referansı.

Konusunda "Gizli" anahtar kelimesini içeren tüm e-postaları, alanınızdan olmayan tüm kullanıcılardan bulmak ve kaldırmak için:

Search-Mailbox -Identity k.peterson -SearchQuery 'Subject:"Secret" and from<>”a-d.site”' -DeleteContent

OR ve AND mantıksal işleçlerini kullanarak, daha karmaşık e-posta arama koşullarını birleştirebilirsiniz.

20 MB'den büyük ekleri olan tüm e-postaları bulun ve silin:

Search-Mailbox -Identity k.peterson -SearchQuery 'hasattachment:true AND Size >20971520' -DeleteContent

İpucu. E-posta öğelerinin boyutu bayt cinsinden belirtilir ve yalnızca eklerin değil, tüm e-posta öğesinin boyutu sayılır. Boyutu megabayt cinsinden de belirleyebilirsiniz. Bu durumda, aşağıdaki sözdizimi kullanılır:

-SearchQuery {Size -gt 30MB}

E-postanın konu ve gövdesindeki metni aynı anda arayabilirsiniz. Örneğin, konusunda "Yeni Yıl" veya e-posta gövdesinde "brendi" geçen tüm mesajları bulup silelim.

Search-Mailbox k.peterson -SearchQuery {Subject:"RE:New Year" OR body:"brandy"} -DeleteContent -Force

Kind bağımsız değişkenini kullanarak posta kutularını belirli öğeler için arayabilirsiniz. Örneğin:

Toplantılar:

-SearchQuery "Kind:meetings"

Kişiler:

-SearchQuery "Kind:contacts"

Veya diğer Outlook öğeleri:

  • E-posta

  • Toplantılar

  • Görevler

  • notlar

  • Dokümanlar

  • Dergiler

  • Kişiler

  • BEN

E-postaları belirli alıcı ve gönderene göre arama:

-SearchQuery 'from:"ceo@a-d.site" AND to:"support-team@a-d.site"'
  • Ekli e-postalar:

    -SearchQuery 'hasattachment:true'
  • Okunan e-postalar:

    -SearchQuery 'isread:false'
  • E-postaları boyuta göre arayın:

    -SearchQuery 'size>300000'

Ek olarak belirli dosyaya sahip iletileri arayabilirsiniz:

-SearchQuery 'attachment:"annual_report2021.pdf"'

Veya dosya türüne göre:

-SearchQuery 'attachment -like:"*.docx"'

Gönderme/alınma tarihine göre arama yapabilirsiniz, ancak birkaç nüans vardır. Bir tarihi arama kriteri olarak kullanırken, Exchange Sunucunuzun bölgesel ayarlarını göz önünde bulundurmalısınız. Örneğin, 22 Şubat 2022 aşağıdaki yollardan biriyle belirtilebilir:

  • 22/02/2022

  • 02/22/2022

  • 22-Şubat-2022

  • 22/Şubat/2022

Ve hatayı görürseniz "

The KQL parser threw an exception…

”-Ara-Posta Kutusu komutunu çalıştırırken, yanlış tarih formatını kullanıyorsunuz demektir.

Belirli bir günde gönderilen e-postaları aramak için şu sorguyu kullanın:

-SearchQuery sent:02/22/2022

Tarih aralığını belirtmeniz gerekiyorsa (belirli bir süre içinde alınan e-posta öğelerini arıyorsunuz):

-SearchQuery {Received:01/04/2022..02/20/2022}

İşte başka bir örnek. 9 Mayıs'tan sonra gelen e-postaları arayalım:

-SearchQuery {Received:> $('05/09/2021')}

New-ComplianceSearch: Exchange'de E-postalar Nasıl Aranır ve Silinir?

Exchange 2016/2019 ve Exchange Online'da (Microsoft 365), New-ComplianceSearch ve New-ComplianceSearchAction<'ı kullanarak kullanıcı posta kutularındaki e-posta iletilerini hızlı bir şekilde aramak ve silmek için yeni yöntemi kullanabilirsiniz. cmdlet'leri.

Microsoft, kullanımdan kaldırılan Search-Mailbox komutu yerine Exchange'de e-posta aramak için bu cmdlet'lerin kullanılmasını önerir.

M365 Güvenlik ve Uyumluluk Merkezine bağlanın:

Connect-IPPSSession

Belirli bir konuya, gönderene ve tarihe sahip e-postalar için posta kutularını aramaya çalışalım.

$Sender = "max@a-d.site"
$StartTime = "02/20/2022"
$EndTime = "02/22/2021"
$Subject = "report2022"

Belirtilen ölçütlere göre bir e-posta arama görevi oluşturmak için şunu çalıştırın:

New-ComplianceSearch -Name ContentSearch_Report2022 -ExchangeLocation all -ContentMatchQuery "sent>=$($StartTime) AND sent<=$($EndTime) AND sender:$($Sender) AND subject:$($Subject)"

Search-Mailbox cmdlet'indeki -SearchQuery seçeneklerine benzer şekilde -ContentMatchQuery özniteliğinde arama ölçütleri belirleyebilirsiniz.

Genellikle bu noktada bir hata oluşur:

New-ComplianceSearchAction: The term 'New-ComplianceSearchAction' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

Tüm Exchange rollerini yukarıda açıklandığı gibi atadığınızı doğrulayın.

Geçerli PowerShell oturumunu kapatın ve yeniden bağlanın:

Get-PSSession | Remove-PSSession

Bu işi çalıştırmak için:

Start-ComplianceSearch -Identity ContentSearch_Report2022

Yapılmasını beklemek zorundasın. Geçerli arama durumunu şu şekilde alabilirsiniz:

Get-ComplianceSearch -Identity ContentSearch_Report2022| FL name,items,size,jobprogress,status

Arama sonuçlarını Önizleme modunda konsola yazdırmak için:

New-ComplianceSearchAction -SearchName ContentSearch_Report2022 -Preview
(Get-ComplianceSearchAction ContentSearch_Report2022| Select-Object -ExpandProperty Results).Split(";")

Bulunan tüm e-posta öğelerini kullanıcı posta kutularından kaldırmak istiyorsanız, -Purge seçeneğini kullanın (Exchange Online'da mevcuttur):

New-ComplianceSearchAction -SearchName ContentSearch_Report2022 -Purge -PurgeType SoftDelete

Silinen e-postaları kullanıcılar tarafından kurtarılabilir hale getirmek istiyorsanız,

-PurgeType SoftDelete

seçenek. Belirtin

-PurgeType HardDelete

öğeleri posta kutularından tamamen kaldırmak için.

Artık arama sonuçlarını silebilirsiniz:

Remove-ComplianceSearch -Identity ContentSearch_Report2022

İlgili makaleler