Merhaba, bir ihtiyacım doğrultusunda hazırlamış olduğum scripti bugün detaylarıyla paylaşacağım.
Script sizin vermiş olduğunuz OU içerisindeki kullanıcıların mailboxlarını kontrol ediyor ve mailboxları 250GB olacak şekilde bir CSV formatında dağıtıyor. CSV raporunun içinde mail adresi ve hangi DB olacağı yazmaktadır. DB isimleri DB01,DB02,DB03 olarak örnek olarak isimlendiriyor ve siz dağıtım işlemini gerçekleştirdiğiniz de DB boyutu 250GB olacak şekilde ayarlayabiliyorsunuz.
Scripti ana hatları incelemek istersek, aşağıdaki gibi parçalayabiliriz.
Kullanıcıdan OU (Organizational Unit) Distinguished Name (DN) bilgisini girmesini ister. Bu DN, PowerShell tarafından verilen Get-Mailbox
komutunda kullanılmaktadır.
$ouDN = Read-Host "Please enter the distinguished name (DN) of the OU"
OU’deki tüm posta kutularını listelenir. Bu, Get-Mailbox
komutu ile gerçekleştirilir. -OrganizationalUnit
parametresi, belirli bir OU altındaki posta kutularını getirir. -ResultSize Unlimited
parametresi, tüm posta kutularının getirilmesini sağlar.
$mailboxes = Get-Mailbox -OrganizationalUnit $ouDN -ResultSize Unlimited | Get-MailboxStatistics | Select DisplayName, TotalItemSize, Database
- Script daha sonra bir döngü başlatır, burada her bir posta kutusunun boyutu hesaplanır ve 250GB sınırına ulaşıncaya kadar mevcut veritabanına eklenir.
- 250GB sınırı aşıldığında, yeni bir veritabanı oluşturulur ve sonraki posta kutusu yeni veritabanına eklenir. Bu işlem, tüm posta kutuları sınırı aşmayacak şekilde atanana kadar tekrar edilir.
- Bu veriler, her posta kutusunun adını, atanmış olduğu veritabanını ve posta kutusunun boyutunu içeren bir CSV dosyasına yazılır.
$newDbs | Export-Csv -Path "new_dbs.csv" -NoTypeInformation -Encoding UTF8
<# ============================================================================================= Name = Cengiz YILMAZ Date = 1.03.2023 www.cengizyilmaz.net www.cozumpark.com/author/cengizyilmaz ============================================================================================ #> # Prompt for DN of the OU $ouDN = Read-Host "Please enter the distinguished name (DN) of the OU" # Get all mailboxes in the OU $mailboxes = Get-Mailbox -OrganizationalUnit $ouDN -ResultSize Unlimited | Get-MailboxStatistics | Select DisplayName, TotalItemSize, Database $newDbs = @() $dbSize = 0 $dbCount = 1 foreach ($mailbox in $mailboxes) { $mailboxSize = $mailbox.TotalItemSize.Value.ToGB() if (($dbSize + $mailboxSize) -le 250) { # add to current DB $newDbs += New-Object PSObject -Property @{ 'Mailbox' = $mailbox.DisplayName 'DB' = "DB$dbCount" 'SizeInGB' = $mailboxSize } $dbSize += $mailboxSize } else { # create a new DB $dbCount++ $dbSize = $mailboxSize $newDbs += New-Object PSObject -Property @{ 'Mailbox' = $mailbox.DisplayName 'DB' = "DB$dbCount" 'SizeInGB' = $mailboxSize } } } # Export to CSV format with UTF8 encoding $newDbs | Export-Csv -Path "new_dbs.csv" -NoTypeInformation -Encoding UTF8