PowerShell Script ile Exchange Server Veritabanı ve Posta Kutusu Yönetimi (Script)

Bu makalede, Exchange sunucunuzda veritabanı ve posta kutusu yönetimini otomatikleştirmek için bir PowerShell scriptinin nasıl kullanıldığını açıklayacağız. Script, bir veritabanında bulunan tüm posta kutularını listeler ve boyutlarına göre veritabanlarını optimal bir şekilde dağıtır.

Öncelikle, script’imizin temel işlevselliğini ve içinde bulunan bazı değişkenleri inceleyelim:

#Variables
$totalDbSizeGB = 0
$maxDbSizeGB = 200
$maxMailboxSizeGB = 40
$dbCounter = 1

#Start Script
$databaseName = Read-Host -Prompt 'Enter the name of the database'

Get-Mailbox -Database $databaseName | ForEach-Object {
    $mailboxSizeGB = (Get-MailboxStatistics $_.Identity).TotalItemSize.Value.ToGB()
    $totalDbSizeGB += $mailboxSizeGB

    if($totalDbSizeGB -gt $maxDbSizeGB -or $mailboxSizeGB -gt $maxMailboxSizeGB){
        $totalDbSizeGB = $mailboxSizeGB
        $dbCounter++
    }

    [PSCustomObject]@{
        "User" = $_.UserPrincipalName
        "Mailbox Size (GB)" = $mailboxSizeGB
        "Database" = "DB{0:D2}" -f $dbCounter
    }
} | Export-Csv -Path .\MailboxReport.csv -NoTypeInformation -Encoding UTF8

Bu script’in işleyişi hakkında ayrıntılı bilgi verelim:

  • İlk olarak, birkaç değişken tanımlarız:
    • $totalDbSizeGB: Bu değişken, mevcut hedef veritabanının toplam boyutunu GB cinsinden saklar. Her posta kutusu eklediğimizde, bu değeri posta kutusunun boyutu kadar artırırız.
    • $maxDbSizeGB: Bu değişken, bir veritabanının maksimum boyutunu GB cinsinden belirler. Bu örnekte, bir veritabanının boyutu 200GB’ı aştığında yeni bir veritabanı oluşturulmasını belirtmek için kullanılır.
    • $maxMailboxSizeGB: Bu değişken, bir posta kutusunun maksimum boyutunu GB cinsinden belirler. Bu örnekte, 40GB’tan büyük bir posta kutusu eklediğimizde, posta kutusunu yeni bir veritabanına koyarız.
    • $dbCounter: Bu değişken, yeni veritabanları oluştururken kullanılacak olan sayaçtır. Her yeni veritabanı oluşturduğumuzda bu sayıyı bir artırırız ve yeni veritabanının adını “DB” ile bu sayının birleşiminden oluştururuz (örneğin, “DB01”, “DB02” vb.).
  • Daha sonra Read-Host komutunu kullanarak kullanıcıdan veritabanı adını alırız.
  • Get-Mailbox cmdlet’i kullanarak belirli bir veritabanında bulunan tüm posta kutularını alırız ve her biri için aşağıdaki işlemleri gerçekleştiririz:
    • Posta kutusunun toplam boyutunu GB cinsinden alırız.
    • Toplam veritabanı boyutunu, mevcut posta kutusunun boyutu kadar artırırız.
    • Eğer toplam veritabanı boyutu maksimum veritabanı boyutunu aşarsa veya mevcut posta kutusunun boyutu maksimum posta kutusu boyutunu aşarsa, toplam veritabanı boyutunu mevcut posta kutusunun boyutuna eşitler ve veritabanı sayacını bir artırırız.
    • Son olarak, bir özel PS nesnesi oluştururuz ve posta kutusu kullanıcısının UPN’sini, posta kutusu boyutunu ve hedef veritabanının adını bu nesnede saklarız.
  • Tüm bu işlemler tamamlandığında, elde edilen bilgileri bir CSV dosyasına aktarırız.

Bu script, Exchange sunucunuzdaki veritabanı ve posta kutusu yönetimini daha kolay ve daha etkin bir şekilde yapmanıza yardımcı olabilir. Elbette, bu script’in işleyişini ve değişkenlerini daha da detaylandırmak ve kendi ihtiyaçlarınıza göre özelleştirmek mümkündür. Bu sayede, sunucunuzdaki veritabanlarının ve posta kutularının yönetimi daha verimli ve otomatik hale gelebilir.

# Database Name
$databaseName = Read-Host -Prompt "Please enter the name of the database"

# Mailboxes List
$mailboxes = Get-Mailbox -Database $databaseName -ResultSize Unlimited

# Mailbox Information
$mailboxInfos = @()

$totalDbSizeGB = 0
$maxDbSizeGB = 200
$maxMailboxSizeGB = 40
$dbCounter = 1

foreach($mailbox in $mailboxes)
{
    # Mailbox Size GB
    $mailboxSize = (Get-MailboxStatistics $mailbox).TotalItemSize.Value.ToGB()

    
    $totalDbSizeGB += $mailboxSize

    # Databases 200GB 
    if ($totalDbSizeGB -gt $maxDbSizeGB) {
        $dbCounter++
        $totalDbSizeGB = $mailboxSize 
    }

    # For mailboxes larger than 40GB, distribute the DBS evenly
    if ($mailboxSize -gt $maxMailboxSizeGB) {
        $dbCounter++
        $totalDbSizeGB = $mailboxSize 
    }

    # Create a new object with the email address, mailbox size, and database name
    $mailboxInfo = New-Object PSObject -Property @{
        EmailAddress = $mailbox.PrimarySmtpAddress
        MailboxSizeGB = $mailboxSize
        TargetDatabaseName = "DB{0:D2}" -f $dbCounter
    }

    # Add mailbox information to the list October
    $mailboxInfos += $mailboxInfo
}

# CSV
$mailboxInfos | Export-Csv -Path "C:\mailboxReport.csv" -NoTypeInformation -UseCulture

Bir Cevap Yazın

%d