Posted in

Active Directory’den Exchange Kalıntılarını Temizleme Rehberi

Sistem yönetimi süreçlerinde, sunucu altyapılarının hizmetten çıkarılma (decommissioning) adımlarının doğru uygulanmaması, öngörülemeyen ve çözümü karmaşık sorunlara yol açabilir. Bu yazıda, usulüne uygun olmayan bir şekilde hizmetten çıkarılmış Microsoft Exchange sunucularının Active Directory (AD) üzerinde bıraktığı kalıntıların nasıl temizleneceğini ele alacağız. Yakın zamanda karşılaşılan bir olayda, sunucuların aniden kapatılıp silinmesi, AD konfigürasyon bölümünde yeni kurulumları engelleyen ve sistemsel hatalara neden olan ciddi tutarsızlıklara yol açmıştır.

Peki bu kalıntılar nasıl temizlenir? Tabi ki ADSI Edit bir çözüm. Ama bu çözüm hem otomatik olmaması hem de tek tek ve büyük bir risk alarak nesneleri silmek gerektirdiğinden birinci çözüm yolu olmamalı. Neyse ki Microsoft, bu tür felaket senaryoları için bize güçlü bir araç sunuyor: CleanupActiveDirectoryEMT.ps1

İyi de ne ola ki bu CleanupActiveDirectoryEMT.ps1? Öncelikle yanlış anlaşılmaya mahal vermemek için bir düzeltme yapayım.  Bu script, ortamdaki tek bir Exchange sunucusunu temizlemek için değil, Active Directory içerisindeki tüm Exchange organizasyonunu kaldırmak için tasarlanmış bir araçtır. Yani, son Exchange sunucunuzu düzgün bir şekilde kaldıramadığınızda veya benim anlattığım senaryodaki gibi sunucular tamamen yok olduğunda, AD’yi Exchange’den tamamen arındırmak için kullanılır. Bu, son çare olarak başvurulması gereken, çok güçlü ve bir o kadar da “tehlikeli” bir script’tir.

Bu script, Exchange Server kurulum medyasının (ISO dosyasının) içinde, \Scripts\ dizini altında bulunur. Ortamda Exchange sunucunuz var ise yine kurulu olduğu dizindeki Scriptis (cd $ExScripts) klasöründe bulunur.

Yaptığı temel işler şunlardır:

  • Active Directory’deki “Microsoft Exchange System Objects” OU’sunu ve içeriğini siler.
  • Exchange ile ilgili tüm Universal Security Group’ları (örn: Exchange Trusted Subsystem, Exchange Servers) kaldırır.
  • Configuration Partition altındaki Exchange organizasyon konteynerini ve tüm ayarları temizler.
  • Exchange’e ait diğer AD nesnelerini ortamdan kaldırır.

 

Önemli Uyarı: Bu İşlemi Ne Zaman Yapmalısınız?

Bu script’i çalıştırmadan önce şu koşulların sağlandığından %100 emin olmalısınız:

  1. Ortamınızda artık hiçbir Exchange sunucusu kalmamıştır veya kalanlar kurtarılamayacak durumdadır.
  2. Amacınız, Active Directory’yi sanki hiç Exchange kurulmamış gibi eski haline getirmektir.
  3. Tüm sürece başlamadan önce Active Directory’nin tam ve sağlıklı bir yedeğini almış olmalısınız. Bu adım, pazarlığa açık değildir!

Sakın ama sakın, çalışan prod ortamındaki bir veya daha fazla Exchange sunucunuzun olduğu bir ortamda bu script’i çalıştırmayın! Aksi takdirde tüm Exchange yapınızı geri dönülmez bir şekilde bozarsınız.

Ben lab ortamında olduğumdan ve Exchange sunucuları geri dönülemez şekilde bozduğumdan dolayı sunucu üzerinden çalıştırıyoum ve ekran görüntüsünü sizinle paylaşıyorum.

Cleanup script completed successfully yazısını gördüğünüzde işlem tamamlanmış demektir. Muhtemelen çalıştırdığınızda Remove-ADPermission komutunda hata alındığını ve yetkiniz olmadığına dair hatalar göreceksiniz. Scrpti çalıştıran kullanıcıyı Domain Admin, Enterprise Admin gruplarına ekledikten sonra (Group yetkilerini alması için logoff/logon işlemini unutmayıon)  scripti tekrar çalıştırdığınızda yukarıdaki gibi başarılı bir şekilde tamamlanacaktır.

CleanupActiveDirectoryEMT.ps1 script’ini çalıştırdıktan sonra büyük bir zafer kazandığınızı düşünebilirsiniz. Active Directory’nin konfigürasyon bölümü tertemiz olur. Ancak Active Directory Users and Computers konsolunda bir kullanıcı nesnesinin “Attribute Editor” sekmesine baktığınızda, msExch* ile başlayan tüm özniteliklerin hala orada ve dolu olduğunu görürsünüz. Bu bir hata değil, beklenen bir davranıştır.

Bunun temel sebebi şudur:

  1. Schema (Şema) Kalıcılığı: Exchange ilk kurulduğunda Active Directory şemasını genişletir ve mailNickname, proxyAddresses, msExchHideFromAddressLists gibi yüzlerce yeni öznitelik ekler. Bu şema değişiklikleri, Exchange kaldırılsa bile AD’de kalıcıdır. CleanupActiveDirectoryEMT.ps1 script’i şemayı geri sarmaz, sadece Exchange’in organizasyonel yapılandırmasını siler.
  2. Veri Kaybı Riski: Microsoft, bu özniteliklerdeki verileri (örneğin bir kullanıcının tüm proxy adreslerini) otomatik olarak silmeyi riskli bulur. Belki de bu bilgiyi başka bir sistem için (örneğin bir kimlik yönetimi çözümü veya başka bir e-posta sistemi) tutmak istiyor olabilirsiniz. Bu yüzden bu temizlik işlemini bilinçli olarak sistem yöneticisine bırakır.

Peki, bu “hayalet” öznitelikleri nasıl temizleyeceğiz? Cevap tabi ki Powershell.

Aşağıdaki PowerShell script’i, organizasyonddaki tüm kullanıcılarda en yaygın Exchange özniteliklerini buluğp ve temizleyecektir. Ben hata alınmaması için genel bir Exchange Attribute lsitesi verdim. hata almanız durumunda o attirbute silerek scripti çalıştırabilirsiniz. Tabi ki script, kullanıcılar üzerinde yetkili bir hesap (Domain Admin,  Enterprise Admin vs) ile çalıştırılmalıdır.

Bu işlem, tüm kullanıcılarınızdaki Exchange bilgilerini kalıcı olarak silecektir. Başlamadan önce mutlaka bir veya birkaç test kullanıcısı üzerinde deneyin ve AD yedeğinizin olduğundan emin olun!

# Active Directory modülü imporrt
Import-Module ActiveDirectory

# Temizlenecek Exchange öznitelikleri
$exchangeAttributes = @(

"msExchBypassAudit",
"msExchDelegateListLink",
"msExchDelegateListBL",
"msExchHideFromAddressLists",
"msExchImmutableId",
"msExchLitigationHoldDate",
"msExchLitigationHoldOwner",
"msExchMailboxAuditEnable",
"msExchMailboxAuditLogAgeLimit",
"msExchMailboxGuid",
"msExchMailboxMoveBatchName",
"msExchMailboxMoveFlags",
"msExchMailboxMoveSourceMDBLink",
"msExchMailboxMoveStatus",
"msExchMailboxMoveTargetMDBLink",
"msExchMailboxSecurityDescriptor",
"msExchPoliciesExcluded",
"msExchPoliciesIncluded",
"msExchRecipientDisplayType",
"msExchRecipientTypeDetails",
"msExchRemoteRecipientType",
"msExchRetentionComment",
"msExchRetentionURL",
"msExchSafeRecipientsHash",
"msExchSafeSendersHash",
"msExchTextMessagingState",
"msExchUMDtmfMap",
"msExchUMEnabledFlags",
"msExchUserAccountControl",
"msExchVersion",
"msExchWhenMailboxCreated",
"mailNickname",
"proxyAddresses",
"mail"
)

# Tüm kullanıcıları çek (Sistem hesaplarını işleme dahil etmemek için filtre eklenebilir)
$users = Get-ADUser -Filter * -Properties $exchangeAttributes

# Kullanıcılar üzeriinde döngü
foreach ($user in $users) {
Write-Host "İşleniyor: $($user.SamAccountName)"

# öznitelik kontrolü ve temizleme
foreach ($attribute in $exchangeAttributes) {
if ($user.PSObject.Properties[$attribute].Value -ne $null) {
try {
Set-ADUser -Identity $user.SamAccountName -Clear $attribute
Write-Host " $($user.SamAccountName) - '$($attribute)' temizlendi." -ForegroundColor Green
}
catch {
Write-Host " $($user.SamAccountName) - HATA: '$($attribute)' temizlenemedi. $($_.Exception.Message)" -ForegroundColor Red
}
}
}
}

Write-Host "İşlem tamamlandı."

Diğer Exchange yazılarına buradan ulaşabilirsiniz.

Faydalı olması dileğiyle.

Leave a Reply

Your email address will not be published. Required fields are marked *