Bu yazımda sizlerle Exchange 2010 Sp1 üzerinde mailbox Export – Import işlemlerini paylaşacağım. Neden mailbox’ları export – import etmeye ihtiyaç duyarız. Basit bir örnek vermek gerekirse , acil durumlarda backup , restore vb. işlemler için bu işlemden yararlanabiliriz.
· Kullanıcı mailbox’ını başka bir sunucuya migrate etmek için’de bu yöntem kullanılabilir.
· Mevcut posta kutularında oluşan sorunlarda kullanabiliriz.
· Mailbox Database’de oluşan hatalar’da bu işlemden yararlanabiliriz.
· Ve üstte’de belirttiğim gibi Manual Yedekleme olarak’da tercih edebiliriz.
Bu işlemleri yapabilmemiz için aşağıda belirttiğim Prerequisites’lerin hazır olması gerekmektedir.
· Windows 2008 r2 (önerilir) x64 işletim sistemi
· PowerShell 2.0
· .NetFramework 3.5.1
· Microsoft Outlook 2010 x64
· Exchange 2010 Management Tools
· Sunucu üzerinde Administrator yetkisinde bir user
Yukarıda belirttiğim hususlar hazır ise işlemlerimize başlıyoruz.
C: altında Exports adında bir klasör oluşturdum. Security sekmesinden Exchange Trusted Subsystem read/write permission yetkisi verdim ve shareettim.
İlk önce aşağıda ki komut’u Exchange Management Shell üzerinde çalıştırmamız gerekmektedir.
Bu komut ise Export – Import yapılaması istenen mailbox’lara izin verir.
New-ManagementRoleAssignment –Role “Mailbox Import Export” –User ufuk.tatlidil
Şimdi Export işlemine başlayalım.
Komutumuz;
New-MailboxExportRequest -Mailbox ufuk.tatlidil -FilePath \dcExportsufuk.tatlidil.pst
C: altında ki Exports klasörümüze bakalım. .pst dosyamış oluşmuş mu diye..
Get-MailboxExportRequest | Get-MailboxExportRequestStatistics
Başarılı bir şekilde pst’mizi export ettik.
Yukarıda belirttiğim komutları PowerShell ‘de çalıştırırsanız , Shell ortamında Export-Import işlemlerini yapabilirsiniz.
Aynı işlemleri ECM altında Recipient Configuration – Mailbox ‘da bulunan user’ın üzerinde’de yapabilirsiniz.
Bir script yardımı ile bu işlemi’de gerçekleştirebilirsiniz.
# Exchange 2010 SP1 Mailbox Export Script
###############
# Settings #
###############
# Pick ONE of the two below. If you choose both, it will use $Server.
$Server = “server”
$Database = “”
# Share to export mailboxes to. Needs R/W by Exchange Trusted Subsystem
# Must be a UNC path as this is run by the CAS MRS service.
$ExportShare = “\servershare”
# After each run a report of the exports can be dropped into the directory specified below. (The user that runs this script needs access to this share)
# Must be a UNC path or the full path of a local directory.
$ReportShare = “\servershare”
# Shall we remove the PST file, if it exists beforehand? (The user that runs this script needs access to the $ExportShare share)
# Valid values: $true or $false
$RemovePSTBeforeExport = $false
###############
# Code #
###############
if ($Server)
{
if (!(Get-ExchangeServer $Server -ErrorAction SilentlyContinue))
{
throw “Exchange Server $Server not found”;
}
if (!(Get-MailboxDatabase -Server $Server -ErrorAction SilentlyContinue))
{
throw “Exchange Server $Server does not have mailbox databases”;
}
$Mailboxes = Get-Mailbox -Server $Server -ResultSize Unlimited
} elseif ($Database) {
if (!(Get-MailboxDatabase $Database -ErrorAction SilentlyContinue))
{
throw “Mailbox database $Database not found”
}
$Mailboxes = Get-Mailbox -Database $Database
}
if (!$Mailboxes)
{
throw “No mailboxes found on $Server”
}
if (!$Mailboxes.Count)
{
throw “This script does not support a single mailbox export.”
}
# Pre-checks done
# Make batch name
$date=Get-Date
$BatchName = “Export_$($date.Year)-$($date.Month)-$($date.Day)_$($date.Hour)-$($date.Minute)-$($date.Second)”
Write-Output “Queuing $($Mailboxes.Count) mailboxes as batch ‘$($BatchName)'”
# Queue all mailbox export requests
foreach ($Mailbox in $Mailboxes)
{
if ($RemovePSTBeforeExport -eq $true -and (Get-Item “$($ExportShare)$($Mailbox.Alias).PST” -ErrorAction SilentlyContinue))
{
Remove-Item “$($ExportShare)$($Mailbox.Alias).PST” -Confirm:$false
}
New-MailboxExportRequest -BatchName $BatchName -Mailbox $Mailbox.Alias -FilePath “$($ExportShare)$($Mailbox.Alias).PST”
}
Write-Output “Waiting for batch to complete”
# Wait for mailbox export requests to complete
while ((Get-MailboxExportRequest -BatchName $BatchName | Where {$_.Status -eq “Queued” -or $_.Status -eq “InProgress”}))
{
sleep 60
}
# Write reports if required
if ($ReportShare)
{
Write-Output “Writing reports to $($ReportShare)”
$Completed = Get-MailboxExportRequest -BatchName $BatchName | Where {$_.Status -eq “Completed”} | Get-MailboxExportRequestStatistics | Format-List
if ($Completed)
{
$Completed | Out-File -FilePath “$($ReportShare)$($BatchName)_Completed.txt”
}
$Incomplete = Get-MailboxExportRequest -BatchName $BatchName | Where {$_.Status -ne “Completed”} | Get-MailboxExportRequestStatistics | Format-List
if ($Incomplete)
{
$Incomplete | Out-File -FilePath “$($ReportShare)$($BatchName)_Incomplete_Report.txt”
}
}
# Remove Requests
Write-Output “Removing requests created as part of batch ‘$($BatchName)'”
Get-MailboxExportRequest -BatchName $BatchName | Remove-MailboxExportRequest -Confirm:$false
Bu işlemlerden sonra export ettiğiniz pst dosyasını başka bir Ms Outlook’a import edebilir veya backup olarak tutabilirsiniz.