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

ลบโฟลเดอร์ใน Exchange Online จากกล่องจดหมายทั้งหมด


คุณต้องการลบโฟลเดอร์ออกจากกล่องจดหมายทั้งหมดใน Exchange Online ด้วย PowerShell หรือไม่ เพื่อให้น่าสนใจยิ่งขึ้น จะเป็นอย่างไรถ้าคุณต้องการลบโฟลเดอร์เฉพาะและกำหนดเป้าหมายกล่องจดหมายเฉพาะ ประทับใจกับวิธีการบรรลุเป้าหมายนั้นใช่ไหม? บทความนี้จะสอนวิธีลบโฟลเดอร์ใน Exchange Online จากกล่องจดหมายทั้งหมด

ก่อนที่คุณจะเริ่มลบโฟลเดอร์ใน Exchange Online

ทำตามขั้นตอนอย่างระมัดระวัง ดังที่แสดงในบทความเพื่อ:

  • ลบ โฟลเดอร์/โฟลเดอร์ เฉพาะจาก กล่องจดหมายเฉพาะ ใน Exchange Online
  • ลบโฟลเดอร์/โฟลเดอร์เฉพาะจากกล่องจดหมายทั้งหมดใน Exchange Online

เพิ่มสิทธิ์ในการเลียนแบบใน Exchange Online

ใช้การเลียนแบบเมื่อคุณมีแอปพลิเคชันบริการที่ต้องการเข้าถึงกล่องจดหมายหลายกล่องและ "ทำหน้าที่เป็น" เจ้าของกล่องจดหมาย อ่านเพิ่มเติมเกี่ยวกับการเลียนแบบและ EWS ใน Exchange

สร้างและเพิ่มสิทธิ์ในการเลียนแบบบัญชีที่จะเรียกใช้สคริปต์ อาจเป็นบัญชีผู้ดูแลระบบส่วนกลางหรือบัญชีบริการ ในตัวอย่างของเรา มีการเพิ่มบัญชีผู้ดูแลระบบส่วนกลาง

ลงชื่อเข้าใช้ Exchange Admin Center (Exchange Online) คลิกที่ บทบาท > บทบาทของผู้ดูแลระบบ คลิกที่ เพิ่มกลุ่มบทบาท

ตั้งชื่อให้กับกลุ่มบทบาทใหม่ เช่น Application-Impersonation

มอบหมายบทบาท ApplicationImpersonation

เพิ่มตัวคุณเอง ผู้ดูแลระบบส่วนกลาง หรือบัญชีบริการที่คุณสร้างเป็นสมาชิก

ตรวจสอบกลุ่มบทบาทและคลิกเพิ่มกลุ่มบทบาท

สร้างกลุ่มบทบาท Application-Impersonation สำเร็จแล้ว

หมายเหตุ: อาจใช้เวลาถึงหนึ่งชั่วโมงก่อนที่การเปลี่ยนแปลงจะมีผล

ขั้นตอนต่อไปคือการติดตั้ง Microsoft Exchange Web Services Managed API 2.2

Microsoft Exchange Web Services ที่ได้รับการจัดการ API 2.2

ดาวน์โหลด Microsoft Exchange Web Services ที่มีการจัดการ API 2.2 บันทึกไฟล์เข้าระบบ

เรียกใช้การตั้งค่าในฐานะผู้ดูแลระบบ และติดตั้ง Microsoft Exchange Web Services Managed API 2.2

หลังจากติดตั้งแล้ว ให้ตรวจสอบเส้นทางการติดตั้งว่าคุณสามารถดูไฟล์ได้

ขั้นตอนต่อไปคือการสร้างไฟล์ข้อความ

สร้างไฟล์ข้อความสำหรับสคริปต์

สร้างไฟล์ข้อความสามไฟล์ในโฟลเดอร์ C:\Temp

  1. โฟลเดอร์.txt
  2. เข้าสู่ระบบ.txt
  3. Users.txt

เปิด Folders.txt และเพิ่ม FolderName ที่ด้านบน เพิ่มชื่อโฟลเดอร์ในแต่ละบรรทัด ในตัวอย่างของเรา เราต้องการลบสี่โฟลเดอร์ในกล่องจดหมาย

สคริปต์จะสร้างบันทึกและวางไว้ในไฟล์ Log.txt เก็บไว้ว่างๆ.

เปิด Users.txt และเพิ่ม ที่อยู่อีเมล ที่ด้านบน เพิ่มที่อยู่อีเมลในแต่ละบรรทัด สคริปต์จะลบโฟลเดอร์ออกจากกล่องจดหมายเหล่านี้

อ่านเพิ่มเติม: ส่งออกรายการกล่องจดหมายเป็นไฟล์ CSV »

ขั้นตอนต่อไปคือการลงทะเบียนแอปพลิเคชันใน Azure AD

ลงทะเบียนแอปพลิเคชันใน Azure AD

หากต้องการลงทะเบียนแอปพลิเคชันใน Azure AD ให้ทำตามขั้นตอนด้านล่าง:

1. ลงชื่อเข้าใช้พอร์ทัล Microsoft Azure

2. ไปที่ Azure Active Directory > การลงทะเบียนแอป

3. คลิก การลงทะเบียนใหม่

4. กรอกชื่อ DeleteFolders

5. เลือก บัญชีในไดเรกทอรีขององค์กรนี้เท่านั้น

6. เลือก ลูกค้าสาธารณะ/เนทิฟ (มือถือและเดสก์ท็อป) และกรอก URL:

https://login.microsoftonline.com/common/oauth2/nativeclient

7. คลิกที่ ลงทะเบียน

8. คัดลอก รหัสแอปพลิเคชัน (ไคลเอ็นต์) และ รหัสไดเรกทอรี (ผู้เช่า) และวางลงใน Notepad (คุณจะต้องใช้ในภายหลัง)

ขั้นตอนต่อไปคือการดาวน์โหลดสคริปต์ PowerShell

เตรียมสคริปต์ PowerShell แบบออนไลน์ของ Exchange Folder

ดาวน์โหลดสคริปต์ Delete-Folders-EXO.ps1 PowerShell และบันทึกลงในโฟลเดอร์ C:\Scripts

<#
    .SYNOPSIS
    Delete-Folders-EXO.ps1
	
    .DESCRIPTION
    Delete specific folder/folders from specific mailboxes in Exchange Online.

    .LINK  
    www.alitajran.com/delete-folder-in-exchange-online-from-all-mailboxes

    .NOTES
    Written by: Catalin Streang
    Edited by:  ALI TAJRAN
    Website:    www.alitajran.com
    LinkedIn:   linkedin.com/in/alitajran

    .LICENSE
    The MIT License (MIT)
    Copyright (c) 2020 ALI TAJRAN
    Permission is hereby granted, free of charge, to any person obtaining a copy
    of this software and associated documentation files (the "Software"), to deal
    in the Software without restriction, including without limitation the rights
    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the Software is
    furnished to do so, subject to the following conditions:
    The above copyright notice and this permission notice shall be included in all
    copies or substantial portions of the Software.
    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    SOFTWARE.

    .CHANGELOG
    V1.00, 10/09/2020 - Initial version
    V2.00, 01/31/2023 - Support Modern Authentication

    .REQUIRED
    The script requires EWS Managed API 2.2.
    Make sure the Import-Module command matches the Microsoft.Exchange.WebServices.dll location of EWS Managed API, chosen during the installation.
#>

# Provide Directory (tenant) ID or Tenant domain name
$TenantId = "2d845888-c017-4121-abe5-02f619863965"

# Provide Application (client) ID
$AppClientId = "fccc7ed0-6218-41f9-a89b-d43b29bf7681"

$MsalParams = @{
    ClientId = $AppClientId
    TenantId = $TenantId   
    Scopes   = "https://outlook.office.com/EWS.AccessAsUser.All"
}

$MsalResponse = Get-MsalToken @MsalParams
$EWSAccessToken = $MsalResponse.AccessToken

# Variables
[string]$info = "White"                         # Color for informational messages
[string]$warning = "Yellow"                     # Color for warning messages
[string]$error = "Red"                          # Color for error messages
[string]$success = "Green"                      # Color for success messages
[string]$LogFile = "C:\Temp\Log.txt"            # Path of the Log File
[string]$FoldersCSV = "C:\Temp\Folders.txt"     # Path of the Folders File
[string]$UsersCSV = "C:\Temp\Users.txt"         # Path of the Users File

function DeleteFolder($MailboxName) {
    Write-Host "Searching for folder in Mailbox Name:" $MailboxName -ForegroundColor $info
    Add-Content $LogFile ("Searching for folder in Mailbox Name:" + $MailboxName)

    # Change the user to impersonate
    $service.ImpersonatedUserId = New-Object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress, $MailboxName)

    do {

        $oFolderView = New-Object Microsoft.Exchange.WebServices.Data.FolderView(1)

        $oFolderView.Traversal = [Microsoft.Exchange.Webservices.Data.FolderTraversal]::Deep

        $oSearchFilter = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo([Microsoft.Exchange.WebServices.Data.FolderSchema]::DisplayName, $FolderName)

        $oFindFolderResults = $service.FindFolders([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::MsgFolderRoot, $oSearchFilter, $oFolderView)

        if ($oFindFolderResults.TotalCount -eq 0) {
            Write-Host "Folder $FolderName does not exist in Mailbox:" $MailboxName -ForegroundColor $warning
            Add-Content $LogFile ("Folder does not exist in Mailbox:" + $MailboxName)
        }
        else {
            Write-Host "Folder $FolderName EXISTS in Mailbox:" $MailboxName -ForegroundColor $success
            Add-Content $LogFile ("Folder EXISTS in Mailbox:" + $MailboxName)

            $oFolder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service, $oFindFolderResults.Folders[0].Id)

            Write-Host "Deleting Folder:" $FolderName -ForegroundColor $success
            Add-Content $LogFile ("Deleting Folder:" + $FolderName)

            # You can choose from a few delete types, just choose one:
            $oFolder.Delete([Microsoft.Exchange.WebServices.Data.DeleteMode]::HardDelete)
            #$oFolder.Delete([Microsoft.Exchange.WebServices.Data.DeleteMode]::SoftDelete)
        }

    } while ($oFindFolderResults.TotalCount -ne 0)

    $service.ImpersonatedUserId = $null

}
Import-Module -Name "C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll"

$service = [Microsoft.Exchange.WebServices.Data.ExchangeService]::new()

# Connect with Modern Authentication
$service.Credentials = [Microsoft.Exchange.WebServices.Data.OAuthCredentials]$EWSAccessToken

# Exchange Online URL
$service.Url = New-Object Uri("https://outlook.office365.com/EWS/Exchange.asmx")

# Read the data
Import-Csv $FoldersCSV -Encoding UTF8 | Foreach-Object {
    $FolderName = $_.FolderName.ToString()

    Import-Csv $UsersCSV -Encoding UTF8 | Foreach-Object {
        $EmailAddress = $_.EmailAddress.ToString()

        # Catch the errors
        trap [System.Exception] {
            Write-Host ("Error: " + $_.Exception.Message) -ForegroundColor $error
            Add-Content $LogFile ("Error: " + $_.Exception.Message)
            continue
        }
        DeleteFolder($EmailAddress)
    }
}

ขั้นตอนต่อไปคือการแก้ไขสคริปต์

แก้ไขสคริปต์ PowerShell ของ Exchange Online ของโฟลเดอร์ลบ

เปลี่ยน TenantId (บรรทัด 46) และ AppClientId (บรรทัด 49) ด้วยค่าที่คุณคัดลอกมาจากแอปพลิเคชันที่ลงทะเบียนใน Azure AD

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

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

ตรวจสอบ บรรทัด 100 และ 101 เพื่อดูตัวเลือกที่มี

$oFolder.Delete([Microsoft.Exchange.WebServices.Data.DeleteMode]::HardDelete)
#$oFolder.Delete([Microsoft.Exchange.WebServices.Data.DeleteMode]::SoftDelete)

ขั้นตอนต่อไปคือการติดตั้งโมดูล MSAL.PS PowerShell

ติดตั้งโมดูล MSAL.PS PowerShell

เราจะใช้โมดูล MSAL.PS PowerShell เพื่อรับโทเค็นจาก Microsoft

เริ่ม Windows PowerShell หรือ Windows PowerShell ISE ในฐานะผู้ดูแลระบบ ติดตั้งโมดูล MSAL.PS PowerShell

Install-Module -Name MSAL.PS

ขั้นตอนต่อไปและสุดท้ายคือการรันสคริปต์

เรียกใช้สคริปต์ PowerShell แบบออนไลน์ของ Exchange โฟลเดอร์

ในตัวอย่างของเรา เรารู้ว่าผู้ใช้ James ได้รับโฟลเดอร์ทั้งหมดในกล่องจดหมายของเขา

ก่อนที่จะรันสคริปต์

  • โฟลเดอร์ย่อย เสียงโฟลเดอร์
  • โฟลเดอร์ย่อย รูปภาพโฟลเดอร์
  • โฟลเดอร์ โฟลเดอร์เพลง
  • โฟลเดอร์ โฟลเดอร์วิดีโอ

เปลี่ยนไดเร็กทอรีเป็นโฟลเดอร์สคริปต์และรันสคริปต์

PS C:\> cd C:\scripts
PS C:\scripts> .\Delete-Folders-EXO.ps1

หน้าต่างเข้าสู่ระบบจะปรากฏขึ้น ลงชื่อเข้าใช้ด้วยบัญชีที่คุณเพิ่มเป็นสมาชิกในบทบาทการแอบอ้างบุคคลอื่น และทำเครื่องหมายที่ช่องยินยอมในนามขององค์กรของคุณ จากนั้นคลิก ยอมรับ

มันเริ่มค้นหาโฟลเดอร์ในกล่องจดหมาย ผลลัพธ์จะเขียนลงในไฟล์ Log.txt

Searching for folder in Mailbox Name: James.Paterson@exoip.com
Folder EXISTS in Mailbox: James.Paterson@exoip.com
Deleting Folder: Folder Audio
Folder does not exist in Mailbox: James.Paterson@exoip.com
Searching for folder in Mailbox Name: Dylan.Piper@exoip.com
Folder does not exist in Mailbox: Dylan.Piper@exoip.com
Searching for folder in Mailbox Name: James.Paterson@exoip.com
Folder EXISTS in Mailbox: James.Paterson@exoip.com
Deleting Folder: Folder Pictures
Folder does not exist in Mailbox: James.Paterson@exoip.com
Searching for folder in Mailbox Name: Dylan.Piper@exoip.com
Folder does not exist in Mailbox: Dylan.Piper@exoip.com
Searching for folder in Mailbox Name: James.Paterson@exoip.com
Folder EXISTS in Mailbox: James.Paterson@exoip.com
Deleting Folder: Folder Music
Folder does not exist in Mailbox: James.Paterson@exoip.com
Searching for folder in Mailbox Name: Dylan.Piper@exoip.com
Folder does not exist in Mailbox: Dylan.Piper@exoip.com
Searching for folder in Mailbox Name: James.Paterson@exoip.com
Folder EXISTS in Mailbox: James.Paterson@exoip.com
Deleting Folder: Folder Videos
Folder does not exist in Mailbox: James.Paterson@exoip.com
Searching for folder in Mailbox Name: Dylan.Piper@exoip.com
Folder does not exist in Mailbox: Dylan.Piper@exoip.com

รันสคริปต์อีกครั้ง มันจะแสดงว่าไม่มีอะไรให้ลบ

PS C:\scripts> .\Delete-Folders-EXO.ps1
Searching for folder in Mailbox Name: James.Paterson@exoip.com
Folder does not exist in Mailbox: James.Paterson@exoip.com
Searching for folder in Mailbox Name: Dylan.Piper@exoip.com
Folder does not exist in Mailbox: Dylan.Piper@exoip.com
Searching for folder in Mailbox Name: James.Paterson@exoip.com
Folder does not exist in Mailbox: James.Paterson@exoip.com
Searching for folder in Mailbox Name: Dylan.Piper@exoip.com
Folder does not exist in Mailbox: Dylan.Piper@exoip.com
Searching for folder in Mailbox Name: James.Paterson@exoip.com
Folder does not exist in Mailbox: James.Paterson@exoip.com
Searching for folder in Mailbox Name: Dylan.Piper@exoip.com
Folder does not exist in Mailbox: Dylan.Piper@exoip.com
Searching for folder in Mailbox Name: James.Paterson@exoip.com
Folder does not exist in Mailbox: James.Paterson@exoip.com
Searching for folder in Mailbox Name: Dylan.Piper@exoip.com
Folder does not exist in Mailbox: Dylan.Piper@exoip.com

หลังจากรันสคริปต์แล้ว

โฟลเดอร์จะถูกลบออกจากกล่องจดหมาย Office 365

ตรวจสอบไฟล์ Log.txt หากคุณต้องการทราบว่าโฟลเดอร์ใดถูกลบออกจากกล่องจดหมายใด

บทความนี้ช่วยคุณลบโฟลเดอร์ใน Exchange Online ด้วย PowerShell หรือไม่

อ่านต่อ: ย้ายกล่องจดหมายไปยัง Exchange Online ด้วย PowerShell »

บทสรุป

คุณได้เรียนรู้วิธีการลบโฟลเดอร์ออกจากกล่องจดหมายทั้งหมดใน Exchange Online ไม่เพียงโฟลเดอร์เดียวที่คุณสามารถลบได้ แต่ยังมีโฟลเดอร์เฉพาะที่คุณสามารถละทิ้งในไฟล์ข้อความได้ ทำตามขั้นตอนที่แสดงในบทความก่อนที่คุณจะเรียกใช้สคริปต์ทันที สคริปต์ Delete-Folders-EXO.ps1 PowerShell นั้นยอดเยี่ยมมากในการบรรลุผลลัพธ์

คุณสนุกกับบทความนี้หรือไม่? คุณอาจต้องการวิธีรับขนาดกล่องจดหมายที่ใหญ่กว่าใน Microsoft 365 อย่าลืมติดตามเราและแบ่งปันบทความนี้

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