ค้นหาเว็บไซต์

ค้นหาและลบอีเมลจากกล่องจดหมายของผู้ใช้บน Exchange Server (Microsoft 365) ด้วย PowerShell


ใน Exchange Server คุณสามารถใช้ cmdlet ของ PowerShell Search-Mailbox หรือ New-ComplianceSearch (พร้อมใช้งานใน Exchange Server และ Exchange Online/Microsoft 365 เวอร์ชันใหม่กว่า) เพื่อค้นหาและ ลบรายการอีเมลออกจากกล่องจดหมายของผู้ใช้ ตัวอย่างเช่น ผู้ใช้ส่งข้อมูลส่วนตัวไปยังเพื่อนร่วมงานในองค์กรโดยไม่ได้ตั้งใจ และไม่มีเวลาเรียกคืนข้อความใน Outlook แผนกรักษาความปลอดภัยของข้อมูลกำหนดให้ผู้ดูแลระบบ Exchange ลบอีเมลส่วนตัวนี้ออกจากกล่องจดหมายของผู้ใช้ทั้งหมดในองค์กร/ผู้เช่า Exchange ของคุณ

บทความนี้ใช้กับ Exchange Server 2019/2016/2013 และ 2010 ภายในองค์กร รวมถึง Exchange Online บนระบบคลาวด์ (Microsoft 365)

สิทธิ์ที่จำเป็นในการค้นหากล่องจดหมาย Exchange

ต้องกำหนดบทบาทต่อไปนี้ให้กับบัญชีผู้ดูแลระบบที่ค้นหาและลบรายการกล่องจดหมาย:

  • นำเข้ากล่องจดหมาย ส่งออก

  • ค้นหากล่องจดหมาย

คุณสามารถกำหนดบทบาทโดยใช้ EAC หรือ PowerShell เชื่อมต่อกับ Exchange Server ภายในองค์กรของคุณโดยใช้ PowerShell และเรียกใช้คำสั่ง:

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

ใน Exchange Online คุณต้องกำหนดบทบาทต่อไปนี้:

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

เพิ่มบัญชีของคุณลงในกลุ่ม ผู้ดูแลระบบ eDiscovery ในศูนย์การปฏิบัติตามข้อบังคับ Microsoft 365

เคล็ดลับ คุณสามารถใช้โมดูล Exchange Online PowerShell v2 (EXO V2) เพื่อเชื่อมต่อกับ Exchange Online

หลังจากกำหนดบทบาทแล้ว ให้เริ่มเซสชัน PowerShell ใหม่

ค้นหากล่องจดหมาย: ค้นหาและลบข้อความจากกล่องจดหมายของผู้ใช้ Exchange

คุณสามารถใช้เว็บอินเทอร์เฟซ Exchange Admin Center (EAC) หรือ กล่องจดหมายค้นหา PowerShell cmdlet เพื่อค้นหารายการอีเมลในกล่องจดหมายของผู้ใช้ คำสั่งนี้ทำให้คุณสามารถค้นหาอีเมลในกล่องเมลตามเกณฑ์ที่กำหนด คัดลอกรายการที่พบไปยังกล่องเมลอื่น หรือลบออก

หากต้องการค้นหากล่องจดหมายของผู้ใช้สำหรับอีเมลที่มีหัวเรื่องเฉพาะ ให้รันคำสั่ง:

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

เมื่อต้องการค้นหากล่องจดหมายทั้งหมดในองค์กร Exchange ให้ใช้คำสั่งต่อไปนี้:

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

เมื่อใช้ cmdlet กล่องจดหมายค้นหาใน Exchange Online (Microsoft 365) คำเตือนจะปรากฏขึ้น:

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 แนะนำให้ใช้ที่มีประสิทธิภาพมากขึ้น

New-ComplianceSearch

และ

New-ComplianceSearchAction

cmdlets ค้นหากล่องจดหมาย (กล่าวถึงด้านล่าง)

หากต้องการคัดลอกผลการค้นหาไปยังกล่องจดหมายและโฟลเดอร์ที่ต้องการ ให้ใช้พารามิเตอร์ TargetMailbox หรือ TargetFolder ซึ่งจะช่วยให้คุณสามารถดูอีเมลที่พบใน Outlook ได้ด้วยตนเองหลังจากการค้นหาเสร็จสิ้น สมมติว่าคุณต้องการค้นหาข้อความอีเมลในรายการกล่องจดหมาย (ระบุใน users.txt) และคัดลอกรายการที่พบไปยังโฟลเดอร์ในกล่องจดหมายที่ระบุ:

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

ตัวเลือก -LogOnly -LogLevel Full หมายความว่าจะต้องประเมินผลการค้นหาเท่านั้นโดยไม่คัดลอกรายการไปยังกล่องจดหมายเป้าหมายหรือลบข้อความ ถ้าใช้อาร์กิวเมนต์นี้ รายงานที่มีผลการค้นหาจะถูกส่งไปยังกล่องจดหมายเป้าหมายที่ระบุ รายงานคือไฟล์ CSV ที่เก็บถาวรซึ่งแสดงรายการกล่องจดหมายที่ตรงตามเกณฑ์การค้นหา

โปรดทราบว่ารายงานที่ได้รับมีข้อความอีเมลสถานะอ่านแล้ว (

Read: True/False

).

คุณสามารถประมาณผลการค้นหาโดยใช้พารามิเตอร์ -EstimateResultOnly โปรดทราบว่าเมื่อใช้ตัวเลือกนี้ คุณไม่จำเป็นต้องระบุกล่องจดหมายหรือโฟลเดอร์เป้าหมาย

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

หากต้องการลบรายการอีเมลที่พบ ให้ใช้พารามิเตอร์ -DeleteContent เพิ่มพารามิเตอร์ -Force เพื่อข้ามข้อความแจ้งการยืนยัน

มาลบข้อความอีเมลทั้งหมดจากผู้ส่ง k.peterson@a-d.site ในกล่องจดหมายทั้งหมดบนเซิร์ฟเวอร์ Exchange เฉพาะ:

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

ก่อนลบรายการอีเมลออกจากกล่องจดหมายโดยใช้พารามิเตอร์ -DeleteContent เราขอแนะนำอย่างยิ่งให้คุณดูอีเมลที่พบโดยใช้

-EstimateResultOnly

หรือ

-LogOnly

ข้อโต้แย้ง

หากต้องการค้นหาเฉพาะรายการที่ถูกลบ ให้เพิ่มพารามิเตอร์ -SearchDumpsterOnly (หากต้องการยกเว้นการค้นหาในรายการที่ถูกลบ ให้เพิ่ม

-SearchDumpster:$false

การโต้แย้ง). หากคุณต้องการแยกกล่องจดหมายเก็บถาวรออกจากผลการค้นหา ให้ใช้พารามิเตอร์ -DoNotIncludeArchive

Search-Mailbox cmdlet มีข้อจำกัดที่สำคัญ: สามารถส่งคืนได้เพียง 10,000 องค์ประกอบเท่านั้น หากเกินขีดจำกัดนี้ ระบบจะส่งกลับข้อผิดพลาด:

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.

ในการลบรายการเพิ่มเติม คุณจะต้องเรียกใช้ cmdlet กล่องจดหมายค้นหา หลายครั้ง หรือแบ่งกล่องจดหมายออกเป็นกลุ่มตามฐานข้อมูลกล่องจดหมายหรือเซิร์ฟเวอร์ Exchange

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

ปัญหา cmdlet Search-Mailbox อีกประการหนึ่งคือประสิทธิภาพต่ำ ในกรณีของบริษัทขนาดใหญ่ การค้นหาอาจใช้เวลาหลายวัน ใน Exchange Server และ Microsoft 365 เวอร์ชันใหม่ วิธีที่ดีที่สุดคือใช้ New-ComplianceSearch cmdlet (กล่าวถึงด้านล่าง) เพื่อค้นหาอีเมล

ตัวอย่างการค้นหาคำหลักสำหรับกล่องจดหมาย Exchange

มาดูตัวอย่างข้อความค้นหาเพื่อค้นหารายการอีเมลโดยใช้พารามิเตอร์ SearchQuery พารามิเตอร์ SearchQuery ประมวลผลข้อความค้นหาในรูปแบบ KQL (ภาษาคำค้นหาคำหลัก) https://docs.microsoft.com/en-us/sharepoint/dev/general-development/keyword-query-language-kql -syntax-อ้างอิง

หากต้องการค้นหาและลบอีเมลทั้งหมดที่มีคำหลัก "ความลับ" ในหัวเรื่องจากผู้ใช้ทั้งหมดที่ไม่ได้มาจากโดเมนของคุณ:

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

เมื่อใช้ตัวดำเนินการเชิงตรรกะ OR และ AND คุณสามารถรวมเงื่อนไขการค้นหาอีเมลที่ซับซ้อนมากขึ้นได้

ค้นหาและลบอีเมลทั้งหมดที่มีไฟล์แนบขนาดใหญ่กว่า 20 MB:

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

เคล็ดลับ ขนาดของรายการอีเมลระบุเป็นไบต์ และจะนับขนาดของรายการอีเมลทั้งหมด ไม่ใช่แค่ไฟล์แนบ คุณยังสามารถระบุขนาดเป็นเมกะไบต์ ในกรณีนี้ จะใช้ไวยากรณ์ต่อไปนี้:

-SearchQuery {Size -gt 30MB}

คุณสามารถค้นหาข้อความในหัวข้อและเนื้อหาของอีเมลได้พร้อมกัน ตัวอย่างเช่น ลองค้นหาและลบข้อความทั้งหมดที่มีคำว่า “ปีใหม่ ” ในหัวเรื่องหรือ “บรั่นดี ” ในเนื้อหาอีเมล

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

คุณสามารถค้นหากล่องจดหมายสำหรับรายการเฉพาะโดยใช้อาร์กิวเมนต์ ชนิด ตัวอย่างเช่น:

การประชุม:

-SearchQuery "Kind:meetings"

ติดต่อ:

-SearchQuery "Kind:contacts"

หรือองค์ประกอบอื่นๆ ของ Outlook:

  • อีเมล

  • การประชุม

  • งาน

  • หมายเหตุ

  • เอกสาร

  • วารสาร

  • ติดต่อ

  • ฉัน

ค้นหาอีเมลโดยระบุผู้รับและผู้ส่ง:

-SearchQuery 'from:"ceo@a-d.site" AND to:"support-team@a-d.site"'
  • อีเมลพร้อมไฟล์แนบ :

    -SearchQuery 'hasattachment:true'
  • อีเมลที่อ่านแล้ว:

    -SearchQuery 'isread:false'
  • ค้นหาอีเมลตามขนาด:

    -SearchQuery 'size>300000'

คุณสามารถค้นหาข้อความที่มีไฟล์เฉพาะเป็นไฟล์แนบได้:

-SearchQuery 'attachment:"annual_report2021.pdf"'

หรือตามประเภทไฟล์:

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

คุณสามารถค้นหาตามวันที่ส่ง/รับ แต่มีความแตกต่างหลายประการ เมื่อใช้วันที่เป็นเกณฑ์การค้นหา คุณต้องพิจารณาการตั้งค่าภูมิภาคของ Exchange Server ของคุณ ตัวอย่างเช่น อาจระบุ 22 กุมภาพันธ์ 2022 ด้วยวิธีใดวิธีหนึ่งต่อไปนี้:

  • 22/02/2022

  • 02/22/2022

  • 22-ก.พ.-2565

  • 22/กุมภาพันธ์/2565

และถ้าคุณเห็นข้อผิดพลาด “

The KQL parser threw an exception…

” เมื่อรันคำสั่ง Search-Mailbox แสดงว่าคุณใช้รูปแบบวันที่ไม่ถูกต้อง

หากต้องการค้นหาอีเมลที่ส่งในวันที่ระบุ ให้ใช้ข้อความค้นหานี้:

-SearchQuery sent:02/22/2022

หากคุณต้องการระบุช่วงวันที่ (คุณกำลังมองหารายการอีเมลที่ได้รับภายในระยะเวลาที่กำหนด):

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

นี่เป็นอีกตัวอย่างหนึ่ง มาค้นหาอีเมลที่ได้รับหลังวันที่ 9 พฤษภาคมกัน:

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

New-ComplianceSearch: จะค้นหาและลบอีเมลใน Exchange ได้อย่างไร

ใน Exchange 2016/2019 และ Exchange Online (Microsoft 365) คุณสามารถใช้วิธีใหม่เพื่อค้นหาและลบข้อความอีเมลในกล่องจดหมายของผู้ใช้ได้อย่างรวดเร็วโดยใช้ New-ComplianceSearch และ New-ComplianceSearchAction< cmdlets

Microsoft ขอแนะนำให้ใช้ cmdlets เหล่านี้เพื่อค้นหาอีเมลใน Exchange แทนคำสั่ง Search-Mailbox ที่เลิกใช้แล้ว

เชื่อมต่อกับ M365 Security & Compliance Center:

Connect-IPPSSession

มาลองค้นหากล่องจดหมายเพื่อหาอีเมลที่มีหัวเรื่อง ผู้ส่ง และวันที่ที่เฉพาะเจาะจง

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

หากต้องการสร้างงานค้นหาอีเมลตามเกณฑ์ที่ระบุ ให้รัน:

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

คุณสามารถระบุเกณฑ์การค้นหาในแอตทริบิวต์ -ContentMatchQuery ซึ่งคล้ายกับตัวเลือก -SearchQuery ใน Search-Mailbox cmdlet

บ่อยครั้งที่เกิดข้อผิดพลาดขึ้น ณ จุดนี้:

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.

ตรวจสอบว่าคุณได้มอบหมายบทบาท Exchange ทั้งหมดตามที่อธิบายไว้ข้างต้น

ปิดเซสชัน PowerShell ปัจจุบันและเชื่อมต่อใหม่:

Get-PSSession | Remove-PSSession

ในการรันงานนี้:

Start-ComplianceSearch -Identity ContentSearch_Report2022

คุณต้องรอให้มันเสร็จสิ้น คุณจะได้รับสถานะการค้นหาปัจจุบันดังนี้:

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

หากต้องการพิมพ์ผลการค้นหาไปยังคอนโซลในโหมดดูตัวอย่าง:

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

หากคุณต้องการลบรายการอีเมลทั้งหมดที่พบออกจากกล่องจดหมายของผู้ใช้ ให้ใช้ตัวเลือก -Purge (มีให้ใช้งานใน Exchange Online):

New-ComplianceSearchAction -SearchName ContentSearch_Report2022 -Purge -PurgeType SoftDelete

หากคุณต้องการให้ผู้ใช้กู้คืนอีเมลที่ถูกลบได้ ให้ใช้

-PurgeType SoftDelete

ตัวเลือก. ระบุ

-PurgeType HardDelete

เพื่อลบรายการออกจากกล่องจดหมายอย่างสมบูรณ์

ตอนนี้คุณสามารถลบผลการค้นหา:

Remove-ComplianceSearch -Identity ContentSearch_Report2022

บทความที่เกี่ยวข้อง