Exchange Server

Exchange Server Disconnected Mailboxes

Exchange Server üzerinde sahip olduğunuz her bir kullanıcı posta kutusu aslında Active Directory üzerinde bir kullanıcı objesi ve Exchange Server posta kutusu veri tabanı üzerinde bir veri deposundan oluşur.

clip_image002

Posta kutusu ile ilgili tüm ayarlar AD veri tabanında kullanıcı öz niteliklerinde yer alırken, mail bilgileri Exchange server posta kutusu veri tabanında saklanır.

Peki, Disconnected Mailbox ne demektir? Exchange Server mailbox database üzerinde bulunan ama AD üzerinde herhangi bir kullanıcı ile ilişkilendirilmemiş olan posta kutularına verilen isimdir.

Disconnected posta kutuları da kendi içerisinde ikiye ayrılmaktadır;

Disabled mailboxes

Bir posta kutusu Exchange Administration Center (EAC) veya Powershell  ile (Disable-Mailbox veya Remove-Mailbox) kapatılabilir veya silinebilir. Hangi işlemi yaparsanız yapın yani ister Disabled konuma getirin ister silin mailbox veri tabanı üzerinde o posta kutusu “disabled state” dediğimiz duruma alınır. Tabiki bu iki işlemin farkı vardır. Eğer bir posta kutusunu kapatırsanız yani disable konumuna getirirseniz active directory üzerinde bu posta kutusu ile ilişkili olan kullanıcı üzerinden ilgili ayarların (Exchange attributes) silinmesi gerçekleştirilir, ancak kullanıcı hala aktif olarak çalışmaya devam eder. Eğer posta kutusunu silerseniz bu durumda ilişkili olduğu active directory kullanıcı hesabı da silinecektir. Ancak hangi komutu veya seçeneği kullanırsanız kullanın posta kutusu varsayılan olarak 30 gün olan “deleted mailbox retention period” silinme süreci boyunca veri tabanında saklanacaktır. Bu sayede olası bir yanlışlık ve benzeri bir durumda bu posta kutusunu kurtarabilirsiniz.

Özetle bir posta kutusunu isterseniz kapatın, isterseniz silin varsayılan olarak 30 gün veri tabanınızda yer kaplamaya devam edecektir. Bunun tek istisnası silme işlemini powershell ile yaparken eğer aşağıdaki iki parametreden birini kullanırsanız bu durumda posta kutusu anında silinecektir

Permanent veya StoreMailboxIdentity

Ortamınızdaki Disabled Mailbox’ ları tespit etmek için aşağıdaki powershell komutunu kullanabilirsiniz

Get-MailboxDatabase | Get-MailboxStatistics | Where { $_.DisconnectReason -eq “Disabled” } | ft DisplayName,Database,DisconnectDate

clip_image004

Eğer bu silme işlemini aşağıdaki gibi yaparsanız 30 gün boyunca veri tabanında saklanmadan hemen silinecektir.

Remove-Mailbox -Identity “satis” -Permanent $true

 

Yukarıdaki komutu çalıştırdıktan sonra artık EAC üzerinde “satis” isminde bir posta kutusu göremezsiniz, ayrıca yine AD üzerinde satis kullanıcısını da göremeyeceksiniz. Son olarak aşağıdaki komut ile posta kutusunun olmadığını doğrulayabilirsiniz

Get-MailboxDatabase | Get-MailboxStatistics | Where { $_.DisplayName -eq “satis” }

Bu komutun çıktısında bir sonuç almayacaksınız, yani satis posta kutusu kalici olarak posta kutusu veri tabanından silinmiştir.

Diğer bir disconnected posta kutusu ise

Soft-deleted mailboxes

Bir posta kutusunu bir posta kutusu veri tabanından bir diğerine taşıdıktan sonra, taşıma işlemi eğer başarılı tamamlanır ise kaynak veri tabanındaki posta kutusu “soft-deleted” olarak işaretlenir. Bu veri tabanları var varsayılan olarak 30 gün boyunca saklanır. Bu şekilde bekleyen veri tabanlarını görmek için ise aşağıdaki pwersehll komutunu kullanabilirsiniz

Get-MailboxDatabase | Get-MailboxStatistics | Where { $_.DisconnectReason -eq "SoftDeleted" } | ft DisplayName,Database,DisconnectDate

 

clip_image006

 

Yine buradaki istisna, eğer taşıma işleminden sonra bir sorun yok ve bu posta kutularının 30 gün saklanmasını istemiyorsanız “Remove-StoreMailbox” komutunu kullanarak bunları temizleyebilirsiniz.

Gelelim ne şekilde silmiş olursanız olun (Disabled mailboxes veya Soft-deleted mailboxes ) şu anda ortamınızda Disconnected mailbox olarak duran posta kutularını silmek istiyorsanız eğer silinme yöntemine göre aşağıdaki powershell komutlarını kullanarak bunları kalıcı olarak temizleyebilirsiniz.

Öncelikle bir kullanıcı için posta kutusunun durumunu aşağıdaki powershell komutu ile kontrol edebiliriz

Get-MailboxDatabase | Get-MailboxStatistics | Where { $_.DisplayName -eq “<display name>” } | fl DisplayName,MailboxGuid,Database,DisconnectReason,DisconnectDate

clip_image008

Ben komutun display name bölümüne “Hakan Uzuner – INFO” yazdım ve gördüğünüz gibi iki tane posta kutusu olduğunu görüyorum. Birisi aktif olan diğeri ise taşınmadan kaynaklı “SoftDeleted” olarak işaretlenen posta kutusu.

Bir diğer kullanıcı için durum ise aşağıdaki gibidir

clip_image010

Bu kullanıcı ise Disabled konumundadır. İsterseniz aşağıdaki komut ile tüm organizasyonunuz için bir rapor alabilirsiniz

Get-MailboxDatabase | Get-MailboxStatistics | Where { $_.DisconnectReason -ne $null } | fl DisplayName,MailboxGuid,Database,DisconnectReason,DisconnectDate

clip_image012

Gördüğünüz gibi iki posta kutusu da listelendi.

Gelelim bunları silme işlemine;

Silmek istediğimiz posta kutusunun GUID sini alıyoruz ve aşağıdaki komut yardımı ile kalıcı olarak siliyoruz

Remove-StoreMailbox -Database CPDB01 -Identity "a5ff3fdc-725f-4acf-98b6-48a40b50da02" -MailboxState SoftDeleted

 

clip_image014

Şimdi ikinci posta kutusunu kalıcı olarak siliyorum

Remove-StoreMailbox -Database CPDB01 -Identity " ff0087f5-70a9-4aa9-b762-dcc628fc2a66" -MailboxState Disabled

 

clip_image016

Artık organizasyonumda hiç disconnected mailbox kalmadı. Eğer daha fazla posta kutusunu bir arada silmek istiyorsanız örneğin organizasyondaki tüm sofdeleted konumundaki posta kutularını kalıcı olarak silmek için aşağıdaki powershell komutunu kullanabilirsiniz

Get-MailboxStatistics -Database DBismi | where {$_.DisconnectReason -eq “SoftDeleted”} | ForEach {Remove-StoreMailbox -Database $_.Database -Identity $_.MailboxGuid -MailboxState SoftDeleted}

Benzer şekilde SoftDeleted olan bölümleri Disabled olarak değiştirerek diğer bir disconnected posta kutusu çeşidi olan posta kutularını da toplu olarak silebilirsiniz.

Tabiki Disconnected posta kutusu için yapılabilecek tek eylem silmek değildir. Aslında normal durumlarda bu tür işlemler yapılmaz, ancak çok büyük şirketlerde kullanıcı sayısı, posta kutusu boyutlarının büyük olması veya AD kullanıcısı silinip posta kutusu silinmediği durumlarda veri tabanları şişmeye başlar. Ancak normal durumlarda disconnected mailbox daha çok yanlışlıkla silinmiş veya bir şekilde işten ayrılmış bir kullanıcı posta kutusundan bir veri alınması gerektiğinde tekrar bağlanmak için kullanılır. Bu durumda disconnected mailbox için aşağıdaki eylemler geçerlidir;

Mevcut kullanıcıya tekrar bağlamak

Başka bir kullanıcıya bağlamak (posta kutusu olmayan)

Posta kutusu olan bir kullanıcı posta kutusuna geri dönmek

Kalıcı olarak silmek

Son adımı zaten sizler ile paylaştım, gelelim diğer adımlara. Bir posta kutusunu yanlışlıkla Disable etmeniz halinde AD kullanıcısı hala durduğu için kolaylıkla onu tekrar ilgili kullanıcıya bağlayabilirsiniz. Bunun için öncelikle aşağıdaki komut ile DB bazında disconnected mailboxların durumunu güncellemeniz gereklidir

Get-MailboxStatistics -Database CPDB02 | ForEach {Update-StoreMailboxState -Database $_.Database -Identity $_.MailboxGuid -Confirm:$False}

Daha sonra aşağıdaki komut ile bunların durumunu çekebiliriz

Get-MailboxDatabase | Get-MailboxStatistics | Where { $_.DisconnectReason -ne $null } | fl DisplayName,MailboxGuid,Database,DisconnectReason

clip_image018

Yukarıda ben Hakan Uzuner INFO hesabı için bir move işlemi yapmış ve bunun sonucu olarak 1 adet aktif bir adet SoftDeleted posta kutusu görmüştük ve sizler ile beraber SoftDeleted olan ve 30 gün boyunca bekleyecek olan posta kutusunu silmiştik. Peki bu yukarıdaki sonuç nedir? Yine Demo amaçlı ben aktif olan kullanıcıyı sildim ve otomatik olarak posta kutusu da Disabled şeklinde bir Disconnected Mailbox’ a dönüşmüş oldu. Ben bunu tekrar kurtarmak için öncelikle AD üzerinden kullanıcıyı tekrar geri döndürmem lazım.

clip_image020

Kullanıcı tekrar aktif olarak AD de görünüyor

clip_image022

Aşağıdaki komutu tekrar çalıştırıyoruz ve otomatik olarak posta kutusunun tekrar EAC üzerinde görüntülendiğini görebiliyoruz

Get-MailboxStatistics -Database CPDB02 | ForEach {Update-StoreMailboxState -Database $_.Database -Identity $_.MailboxGuid -Confirm:$False}

clip_image023

Eğer kısa bir sürede bu gerçekleşmez ise elle bu işlemi aşağıdaki şekilde yapabilirsiniz. EAC üzerinde mailboxes kısmında 3 noktaya tıklayıp “Connect a mailbox” linkine tıklayınız.

clip_image025

clip_image027

Yukarıdaki gibi disconnected olan posta kutularını göreceksiniz, eğer aradığınız posta kutusunu burada göremiyorsanız yine aşağıdaki tazeleme  – güncelleme komutunu çalıştırabilirsiniz

Not: bunu her bir db için çalıştırmanız gerekli, veya silinmiş posta kutusunun hangi db de olduğunu biliyorsanız o db de çalıştırmanız yeterlidir

Get-MailboxStatistics -Database CPDB02 | ForEach {Update-StoreMailboxState -Database $_.Database -Identity $_.MailboxGuid -Confirm:$False}

Daha sonra açılan menüdeki mektup zarfı ikonuna tıklamanız yeterlidir.

clip_image029

 

Otomatik olarak eski kullanıcıya posta kutusu bağlanacaktır.

Eğer uygun bir kullanıcı yok ise connect dediniz ama sistem uygun bir kullanıcı bulamadığında size aşağıdaki gibi bir soru soracaktır

clip_image031

Siz bu bölüme tıklarsanız nasıl bir posta kutusuna bağlamak istediğinizi soracaktır

clip_image033

Bir sonraki adımda bağlamak istediğiniz kullanıcıyı seçiyorsunuz

clip_image035

 

 Bu sayede hakan uzuner info posta kutusunu posta kutusu olmayan başka bir kullanıcıya bağlamış oldunuz.

Eğer bu bağlama işlemlerini powershell ile yapmak isterseniz

Connect-Mailbox -Identity “Hakan UZUNER – INFO” -Database CPDB02 -User “Hakan info” -Alias hakaninfo

Bir diğer kullanım senaryosu ise bu posta kutusunun içeriğini başka bir posta kutusuna dönmek olacaktır.

Öncelikle silinmiş olan posta kutusunun GUID bilgisi için aşağıdaki komutu kullanın

Get-MailboxDatabase | Get-MailboxStatistics | Where {$_.DisconnectReason -eq "Disabled"} | fl DisplayName,MailboxGuid,LegacyDN,Database

 

GUID yi aldıktan sonra ise aşağıdaki gibi dönüş işlemi yapabilirsiniz

New-MailboxRestoreRequest -SourceStoreMailbox e4890ee7-79a2-4f94-9569-91e61eac372b -SourceDatabase CPB02 -TargetMailbox "Levent Uzuner" -AllowLegacyDNMismatch

 

Bir diğer senaryo ise taşıdığınız ancak sorun yaşadığınız için kaynak posta kutusunun restore edilmesi durumudur. Yani siz bir kullanıcı posta kutusunu taşıdığınız zaman, bu taşıma işlemi başarılı tamamlandıktan sonra kaynak veri tabanı üzerinde bu posta kutusu softDeleted olarak işaretlenir, bunu zaten makalemin başlangıcında paylaşmamıştım. Ancak bir nedenden dolayı bu posta kutusuna ihtiyaç duyarsanız eğer öncelikle seftdeleted olan posta kutularını aşağıdaki komut ile listeleyin

Get-MailboxDatabase | Get-MailboxStatistics | Where {$_.DisconnectReason -eq “SoftDeleted”} | fl DisplayName,MailboxGuid,LegacyDN,Database

Daha sonra ihtiyaç duyduğunuz posta kutusuna ait olan GUID’ yi not alın ve aşağıdaki komut ile başka bir kullanıcı posta kutusuna dönün

 New-MailboxRestoreRequest -SourceStoreMailbox dc35895a-a628-4bba-9aa9-650f5cdb9ae7 -SourceDatabase MBXDB01 -TargetMailbox “Hasan UZUNER” –AllowLegacyDNMismatch

Bu son komut ile makalemin sonuna geldik, umarım faydalı bir makale olmuştur, bir sonraki makalemde görüşmek üzere

Kaynaklar

https://technet.microsoft.com/en-us/library/jj863435%28v=exchg.150%29.aspx

https://technet.microsoft.com/en-us/library/jj863438%28v=exchg.150%29.aspx

 

 

 

 

 

Hakan Uzuner

2002 yılından beri aktif olarak bilişim sektöründe çalışmaktayım. Bu süreç içerisinde özellikle profesyonel olarak Microsoft teknolojileri üzerinde çalıştım. Profesyonel kariyerim içerisinde eğitmenlik, danışmanlık ve yöneticilik yaptım. Özellikle danışmanlık ve eğitmenlik tecrübelerimden kaynaklı pek çok farklı firmanın alt yapısının kurulum, yönetimi ve bakımında bulundum. Aynı zamanda ÇözümPark Bilişim Portalı nın Kurucusu olarak portal üzerinde aktif olarak rol almaktayım. Profesyonel kariyerime ITSTACK Bilgi Sistemlerinde Profesyonel Hizmetler Direktörü olarak devam etmekteyim.

İlgili Makaleler

2 Yorum

  1. Hocam merhaba exchange database –> data base şeklinde oluşturulmuş arada boşluk var powershell komutu bu sebep ile hata veriyor. Bu boşluğu nasıl powershell komutuna yedirebiliriz. Desteğiniz için şimdiden teşekkür ederim.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu