Exchange Online'daki klasörü tüm posta kutularından silin


PowerShell ile Exchange Online'daki tüm posta kutularından bir klasörü silmek istiyor musunuz? Bunu daha ilginç hale getirmek için, belirli klasörleri silmek ve belirli posta kutularını hedeflemek isterseniz ne olur? Bunu nasıl başaracağınız konusunda etkileyici, değil mi? Bu makale size Exchange Online'daki klasörleri tüm posta kutularından nasıl sileceğinizi öğretecektir.

Exchange Online'da klasörleri silmeye başlamadan önce

Aşağıdakileri yapmak için makalede gösterildiği gibi adımları dikkatlice izleyin:

  • Exchange Online'daki belirli posta kutularından belirli klasörleri/klasörleri silin
  • Exchange Online'daki tüm posta kutularından belirli klasörleri/klasörleri silin

Exchange Online'da kimliğe bürünme hakları ekleme

Birden fazla posta kutusuna erişmesi ve posta kutusu sahibi "gibi hareket etmesi" gereken bir hizmet uygulamanız varsa kimliğe bürünmeyi kullanın. Exchange'de kimliğe bürünme ve EWS hakkında daha fazla bilgi edinin.

Komut dosyasını çalıştıracak hesaba kimliğe bürünme hakları oluşturun ve ekleyin. Bu, genel bir yönetici hesabı veya hizmet hesabı olabilir. Örneğimizde global yönetici hesabı eklenmiştir.

Exchange Yönetim Merkezi'nde (Exchange Online) oturum açın. Roller > Yönetici rolleri'ni tıklayın. Rol grubu ekle'yi tıklayın.

Yeni rol grubuna bir ad verin; örneğin, Uygulama-Kimliğe Bürünme.

ApplicationImpersonation rolünü atayın.

Kendinizi, genel yöneticiyi veya üye olarak oluşturduğunuz bir hizmet hesabını ekleyin.

Rol grubunu inceleyin ve Rol grubu ekle'yi tıklayın.

Uygulama-Kimliğe Bürünme rol grubu başarıyla oluşturuldu.

Not: Değişikliklerin uygulanması bir saat kadar sürebilir.

Bir sonraki adım, Microsoft Exchange Web Hizmetleri Yönetilen API 2.2'yi yüklemektir.

Microsoft Exchange Web Hizmetleri Yönetilen API 2.2

Microsoft Exchange Web Hizmetleri Yönetilen API 2.2'yi indirin. Dosyayı sisteme kaydedin.

Kurulumu yönetici olarak çalıştırın ve Microsoft Exchange Web Hizmetleri Yönetilen API 2.2'yi yükleyin.

Kurulumdan sonra kurulum yolunda dosyaları görebildiğinizi doğrulayın.

Bir sonraki adım metin dosyalarını oluşturmaktır.

Komut dosyası için metin dosyaları oluşturun

C:\Temp klasöründe üç metin dosyası oluşturun.

  1. Klasörler.txt
  2. Log.txt
  3. Kullanıcılar.txt

Folders.txt dosyasını açın ve en üste KlasörAdı'nı ekleyin. Her satıra klasör adlarını ekleyin. Örneğimizde posta kutularındaki dört klasörü silmeyi seviyoruz.

Komut dosyası, günlükler oluşturacak ve bunları Log.txt dosyasına yerleştirecektir. Boş tutun.

Users.txt'yi açın ve en üste EmailAddress'i ekleyin. Her satıra e-posta adreslerini ekleyin. Komut dosyası, bu posta kutularındaki klasörleri silecektir.

Devamını oku: Posta kutularının listesini CSV dosyasına aktarın »

Bir sonraki adım, bir uygulamayı Azure AD'ye kaydetmektir.

Uygulamayı Azure AD'ye kaydetme

Azure AD'ye bir uygulamayı kaydetmek için aşağıdaki adımları izleyin:

1. Microsoft Azure portalında oturum açın.

2. Azure Active Directory > Uygulama kayıtları'na gidin.

3. Yeni kayıt'ı tıklayın.

4. DeleteFolders adını girin.

5. Yalnızca bu kuruluş dizinindeki hesaplar'ı seçin.

6. Genel istemci/yerel (mobil ve masaüstü)'yü seçin ve URL'yi girin:

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

7. Kaydol'u tıklayın.

8. Uygulama (istemci) kimliğini ve Dizin (kiracı) kimliğini kopyalayıp Not Defteri'ne yapıştırın (buna daha sonra ihtiyacınız olacak).

Bir sonraki adım PowerShell betiğini indirmektir.

Klasörleri Sil Exchange Online PowerShell betiğini hazırlama

Sil-Folders-EXO.ps1 PowerShell betiğini indirin ve C:\Scripts klasörüne kaydedin.

<#
    .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)
    }
}

Bir sonraki adım betiği düzenlemektir.

Klasörleri Sil Exchange Online PowerShell betiğini düzenleme

TenantId (satır 46) ve AppClientId'i (satır 49) Azure AD'deki kayıtlı uygulamadan kopyaladığınız değerlerle değiştirin.

Komut dosyası, klasörleri ve klasörlerdeki mesajları tamamen silecektir ve bunları Kurtarılabilir öğeler klasöründen kurtaramazsınız.

Klasörleri silmek ve iletileri posta kutusunun Kurtarılabilir Öğeler klasörüne taşımak istiyor musunuz? Bunu SoftDelete olarak değiştirin.

Kullanılabilir seçenekler için satır 100 ve 101'i kontrol edin.

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

Bir sonraki adım MSAL.PS PowerShell modülünü kurmaktır.

MSAL.PS PowerShell modülünü yükleyin

Microsoft’tan tokenları almak için MSAL.PS PowerShell modülünü kullanacağız.

Windows PowerShell'i veya Windows PowerShell ISE'yi yönetici olarak başlatın. MSAL.PS PowerShell modülünü yükleyin.

Install-Module -Name MSAL.PS

Bir sonraki ve son adım betiği çalıştırmaktır.

Klasörleri Sil Exchange Online PowerShell betiğini çalıştırın

Örneğimizde, James kullanıcısının posta kutusundaki tüm klasörleri aldığını biliyoruz.

Komut dosyasını çalıştırmadan önce

  • Alt Klasör Ses Klasörü
  • Alt Klasör Klasör Resimleri
  • Klasör Klasör Müzik
  • Klasör Klasör Videoları

Dizini scripts klasörüne değiştirin ve betiği çalıştırın.

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

Bir oturum açma penceresi görünecektir. Kimliğe bürünme rolüne üye olarak eklediğiniz hesapla oturum açın ve Kuruluşunuz adına izin ver onay kutusunu işaretleyin. Ardından Kabul Et'i tıklayın.

Posta kutularındaki klasörleri aramaya başlar. Çıktı Log.txt dosyasına yazılacaktır.

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

Komut dosyasını yeniden çalıştırın. Silinecek bir şey olmadığını gösterecektir.

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

Komut dosyasını çalıştırdıktan sonra

Klasörler Office 365 posta kutusundan silinir.

Hangi klasörlerin hangi posta kutularından silindiğini bilmek istiyorsanız Log.txt dosyasını kontrol edin.

Bu makale PowerShell ile Exchange Online'daki bir klasörü silmenize yardımcı oldu mu?

Okumaya devam edin: PowerShell ile posta kutusunu Exchange Online'a taşıma »

Çözüm

Exchange Online'daki tüm posta kutularından bir klasörün nasıl silineceğini öğrendiniz. Silebileceğiniz tek bir klasör değil, bir metin dosyasında vazgeçebileceğiniz belirli klasörler de vardır. Komut dosyasını hemen çalıştırmadan önce makalede gösterilen adımları izleyin. Sil-Folders-EXO.ps1 PowerShell betiği, sonuçlara ulaşmak için mükemmeldir.

Bu makaleyi beğendiniz mi? Ayrıca Microsoft 365'ten daha büyük posta kutusu boyutu nasıl elde edilir konusunu da beğenebilirsiniz. Bizi takip etmeyi ve bu makaleyi paylaşmayı unutmayın.

İlgili makaleler