Exchange Server 2010′ dan 2016′ ya Public Folder Taşıma İşlemleri

Exchange Server 2010 hala pek çok müşteri tarafından aktif olarak kullanılan bir mail server ürünüdür. Ancak günümüzde yani 2020 yılı itibari ile desteği bitmiş ve eski bir ürün olması itibari ile sık sık taşıma projelerine rastlıyoruz. Aslında temel mantık çok zor olmamak ile kullanıcı deneyimine dikkat eden müşteriler bu işi profesyonellere bırakırken bütçesi sınırlı ve buna karşılık kesintilere tahammülü olan firmalar ise bu geçişleri kendileri yapıyor. Bu geçişlerdeki en büyük sorunlardan birisi de public folder taşıma işlemidir. Aslında PF çok eski bir teknoloji olup uzun süre önce Microsoft bunun gibi ortak alanlar için SharePoint ürününü kullanmayı tavsiye etmişti. Fakat yine ayrı bir uzmanlık ve lisans, bakım maliyetleri nedeni ile pek rağbet görmedi diyebiliriz. Günümüzde hala aktif PF kullanımlarının olduğu düşünülür ise bu makale faydalı olabilir.

Temel mantık aslında Exchange 2013, 2016, 2019 ve Office 365 için aynı, ben taşıma işlemlerini Exchange 2010 – 2016 arasında yapacağım.

Öncelikle bu işlemler için kullanacağımız komut setlerini eski sunucu üzerine aşağıdaki link üzerinden indiriyoruz

https://www.microsoft.com/en-us/download/details.aspx?id=38407

Daha sonra eski sunucu üzerinde EMS ile aşağıdaki komutu çalıştırıyoruz;

Get-OrganizationConfig | Format-List PublicFoldersLockedforMigration, PublicFolderMigrationComplete

Bunun amacı mevcut bir taşıma işi var mı kontrol ediyoruz. Malum eğer bir danışman iseniz müşteriniz sizden önce birtakım aksiyonlar almış olabilir ve önce bunu kontrol etmek şart.

Eğer bu değer True olarak çıkar ise karşımıza aşağıdaki komut ile False yapmamız gerekli;

Set-OrganizationConfig -PublicFoldersLockedforMigration $false -PublicFolderMigrationComplete $false

Herhangi bir taşıma işi olmadığını gördükten sonra mevcut PF için bilgi toplayalım.

Get-PublicFolder -Recurse | Export-CliXML C:\Komut\Legacy_PFStructure.xml

Burada ben C dizini içerisinde komut isminde bir klasör oluşturdum, isterseniz siz klasörün ismini değiştirebilirsiniz ancak mutlaka dosya isimleri ve komutları indirdiğiniz dizin aynı olsun, burada hazır olarak indirdiğimiz komutlar export ettiğimiz xml dosyalarını arayacaktır. Yani klasör ismi önemli değil ama dosya isimleri aynı olmalı veya indirdiğiniz PS komutlarını editlemeniz gerekli. Buradaki amacımız mevcut PF için bilgi toplamak. Bir nevi envanter çekiyoruz gibi düşünebilirsiniz.

Daha sonra aşağıdaki komut ile dosyaların içerisindeki öğe sayısı, boyutları ve sahipleri gibi bilgileri toplayalım.

Get-PublicFolderStatistics | Export-CliXML C:\Komut\Legacy_PFStatistics.xml

Sonra ise mevcut izinlerin bir kopyasını almak için aşağıdaki komutu kullanalım;

Get-PublicFolder -Recurse | Get-PublicFolderClientPermission | Select-Object Identity,User -ExpandProperty AccessRights | Export-CliXML C:\Komut\Legacy_PFPerms.xml

Bu komutları çalıştırdıktan sonra sağ bölümdeki gibi xml dosyalarını görmemiz gerekli.

Bu bölümden sonra PF klasörlerinde “\” karakteri var mı onu kontrol etmemiz gerekli. Bunun en temel nedeni ise komut setleri bunu parent yani üst klasör olarak algılayacaktır, eğer PF klasörlerinizde “\” geçiyor ise önce onları bulmalı ve klasör isimlerini değiştirmemiz gerekli.

Get-PublicFolderStatistics -ResultSize Unlimited | Where {($_.Name -like “*\*”) -or ($_.Name -like “*/*”) } | Format-List Name, Identity

Eğer böyle bir klasör var ise aşağıdaki komut ile bunu rename yapabilirsiniz.

Set-PublicFolder -Identity <public folder identity> -Name <new public folder name>

 Peki şimdi sıra Exchange 2016 tarafına geldi, öncelikle herhangi bir public folder migration isteği olmadığına emin oluyoruz.

$batch = Get-MigrationBatch | ?{$_.MigrationType.ToString() -eq “PublicFolder”}

Eğer bir taşıma isteği var ise siliyoruz.

$batch | Remove-MigrationBatch -Confirm:$false

Daha sonra ise 2016 üzerinde herhangi bir public folder posta kutusu olmadığını kontrol ediyoruz;

Get-Mailbox -PublicFolder

Eğer bendeki gibi boş bir sonuç yerine bir sonuç çıkar ise mevcut klasörleri aşağıdaki komut ile sırayın;

Get-PublicFolder

Ardından bunlar önemsiz ise silin, muhtemel önceki taşıma işlemlerinden kalmış olabilir.

Get-Mailbox -PublicFolder | Where {$_.IsRootPublicFolderMailbox -eq $false} | Remove-Mailbox -PublicFolder -Force -Confirm:$false

Get-Mailbox -PublicFolder | Remove-Mailbox -PublicFolder -Force -Confirm:$false

Şimdi tekrar Exchange 2010 ortamına dönüyoruz ve bir csv dosyası oluşturacağız. Bu dosya dosya isimleri ve boyutlarını eşlemek için kullanılacak.

.\Export-PublicFolderStatistics.ps1 <Folder to size map path> <FQDN of source server>

Bu komut hatırlarsanız yukarıda internetten indirdiğimiz komutlardan biridir. Devamında C:\Komut\name-to-folder.csv ve PF’ ı tutan exchange 2010 mailbox sunucusunun FQDN ismini yazıyorum. Bu dosyayı isterseniz bir paylaşıma alır bu sayede 2016 tarafından erişilebilir yaparsınız veya dosyayı daha sonra 2016 üzerinde çalıştıracağımız komut için ilgili dizine kopyalayabilirsiniz. Ben kopyalamayı tercih ediyorum. Benim komutum aşağıdaki gibi oldu;

.\Export-PublicFolderStatistics.ps1 C:\Komut\foldertosive.csv mbx1.cozumpark.local

Not: Komutu indirdiğiniz dosya dizinine geçtikten sonra çalıştırın veya tam yolu yazın.

Diğer komutumuz ise aşağıdaki gibidir;

.\PublicFolderToMailboxMapGenerator.ps1 <Maximum mailbox size in bytes> <Folder to size map path> <Folder to mailbox map path>

Bu dosyayı ise Exchange Server 2016 doğru sayıda public folder mailbox sayısını hesaplamak için kullanıyor. Burada PF posta kutusu için bir limit koymamız gerekiyor, bu mevcut dosyaların boyutu ile ilgili bir konu ona göre uygun bir kota koymanızı öneriyorum.

Bu ihtiyaç için aşağıdaki gibi bir komut kullanabilirsiniz

Get-PublicFolder -Recurse | Get-PublicFolderStatistics | Select FolderPath, ItemCount, TotalAssociatedItemSize, TotalDeletedItemSize, TotalItemSize | fl

Değeri komutu bytes cinsinden gireceğimizi unutmayın. Daha sonra path bilgisi yazıyoruz, örnek komut aşağıdaki gibidir;

.\PublicFolderToMailboxMapGenerator.ps1 21474825484 C:\Komut\name-to-folder.csv  C:\Komut\folder-to-mailboxmap.csv

Şimdi Exchange Server 2016 üzerine geçiyoruz ve public folder açmak için aşağıdaki komutu kullanıyoruz;

.\Create-PublicFolderMailboxesForMigration.ps1 -FolderMappingCsv Mapping.csv -EstimatedNumberOfConcurrentUsers:<estimate>

Not: PS ve çıktıları aynı şekilde 2016 sunucusu üzerine taşıyabilirsiniz. Burada EstimatedNumberOfConcurrentUser tahmin edeceğiniz gibi bir klasöre eş zamanlı olarak bağlanacak kişi sayısıdır. Örneğin 100 kullanıcılı bir ortamda bir klasöre en fazla 20 kişi bağlanır veya bağlanmaz. Ancak bu şirket ihtiyaçlarına göre değişir, misal ortak klasörde adres defteri tutarsanız herkes bağlanır, call center veya benzeri ekiplere özel klasörler açarsanız onların sayısı kadar olmalıdır vs. Ancak bunu sorun etmeyin çünkü bu değeri daha sonra değiştirebilirsiniz.

Benim komutumun son hali aşağıdaki gibidir;

.\Create-PublicFolderMailboxesForMigration.ps1 -FolderMappingCsv C:\Komut\folder-to-mailboxmap.csv -EstimatedNumberOfConcurrentUsers:100

Artık taşıma işlemine başlayabiliriz, bunun için aşağıdaki komutu Exchange Server 2016 üzerinde çalıştırıyoruz;

New-MigrationBatch -Name PFMigration -SourcePublicFolderDatabase (Get-PublicFolderDatabase -Server <Source server name>) -CSVData (Get-Content <Folder to mailbox map path> -Encoding Byte) -NotificationEmails <email addresses for migration notifications>

Burada notifications yani mail ile bilgilendirme parametresi şart değil bu nedenle kullanmanıza gerek yok. Kalan komut bende aşağıdaki gibidir;

New-MigrationBatch -Name PFMigration -SourcePublicFolderDatabase (Get-PublicFolderDatabase -Server mbx1.cozumpark.local) -CSVData (Get-Content folder-to-mailboxmap.csv -Encoding Byte)

Daha sonra ise taşıma işlemini başlatıyoruz

Start-MigrationBatch “PFMigration”

Bundan sonra ister ara yüzden ister PS ile süreci takip edebilirsiniz

Şu anda eşitleme işlemi başladı, bu süreçte Exchange 2010 üzerindeki Public Folder erişimleri sorunsuz devam etmektedir, eşitleme işlemleri her değişikliği almaktadır ancak buradaki durum Synced ibaresini aldığı anda artık son değişiklikleri de almak için eski PF erişimlerini kapatmak gereklidir, yukarıdaki ekran bu şekilde göründüğü zaman aşağıdaki iki komut ile exchange 2010 tarafındaki erişimi kapatıyoruz.

Not: Her 10GB için ortalama 1 saat gibi düşünebilirsiniz, tabi ki bu hem eski hem yeni olmak üzere müşterilerin sistem performansı ile değişkenlik gösterebilir.

Bunu gördükten sonra Exchange 2010 üzerinde aşağıdaki iki komutu çalıştırıyoruz.

Set-OrganizationConfig -PublicFoldersLockedForMigration:$true

Set-OrganizationConfig -PublicFolderMigrationComplete:$true

Daha sonra ise Exchange 2016 üzerinde aşağıdaki komutu çalıştırıyoruz

Set-OrganizationConfig -PublicFoldersEnabled Remote

Ardından taşıma işini sonlandırıyoruz;

Bunun için sağ bölümde bulunan “Complete this migration batch” linkine tıklamamız yeterli. Ya da aşağıdaki PS komutunu kullanabilirsiniz

Complete-MigrationBatch PFMigration

Bundan sonra ilk olarak bir posta kutusuna bu Public Folder’ ı bağlayıp test edebilirsiniz;

Set-Mailbox -Identity <Test User> -DefaultPublicFolderMailbox <Public Folder Mailbox Identity>

Ardından aşağıdaki komutu Exchange Server 2016 üzerinde çalıştırıyoruz ve süreci tamamlıyoruz.

Set-OrganizationConfig -PublicFoldersEnabled Local

Bu sayede taşıma işlemini tamamlamış olduk. Bundan sonrasında Exchange 2010 üzerindeki Public Folder’ ı silmeniz yeterli olacaktır.

https://docs.microsoft.com/en-us/previous-versions/office/exchange-server-2010/dd876883(v=exchg.141)

Sonrasında normal bir geçiş planı gereği exchange 2010 sunucusunun kaldırabilirsiniz.

Umarım faydalı bir yazı olmuştur, bir sonraki makalemde görüşmek üzere.

Kaynak

https://docs.microsoft.com/en-us/exchange/collaboration/public-folders/batch-migration-from-previous-versions?view=exchserver-2016