Merhaba
Daha önce yayınladığım Exchange Server SE Sağlık Kontrolü: HealthChecker.ps1 ile Uçtan Uca yazısında, tek sunuculu bir ortamda HealthChecker.ps1 scriptinin nasıl indirileceğini ve çalıştırılacağını anlatmıştım. Bu yazıda ise aynı işlemi Database Availability Group (DAG) yapısında, iki node ve bir File Share Witness (FSW) üzerinde uçtan uca uyguluyoruz.
DAG ortamında sağlık kontrolü, tek sunucudaki adımların iki kez tekrarlanmasından ibaret değildir. İki nedenden dolayı farklıdır:
- Yapılandırma kayması (configuration drift): İki node zaman içinde birbirinden ayrışır. Bir node’da yapılan bir düzeltme diğerinde unutulur ve fark, ancak failover olduğunda performans sorunu olarak ortaya çıkar.
HealthChecker‘ın birleşik HTML raporu bu farkları yan yana gösterir. - DAG’ın kendi sağlığı:
HealthCheckersunucu bazlı çalışır. Replikasyon durumu, Cluster Quorum, Witness erişilebilirliği ve veritabanı kopya durumu gibi DAG’a özel konuları ayrıca kontrol etmeniz gerekir.
Bu yazının amacı tespit etmek ve anlamak. Raporda çıkan bulguları tek tek açıklıyor, hangisinin ne anlama geldiğini ve neden önemli olduğunu ele alıyoruz. Bulguların kapatılması ve Security Update kurulumu bir sonraki yazının konusu olacak.
Lab Topolojisi
Bu çalışmada kullandığım ortam aşağıdaki gibidir:
| Sunucu | Rol | İşletim Sistemi | Not |
|---|---|---|---|
| W25EXCNOD1 | Exchange Server SE (Mailbox) | Windows Server 2025 | DAG üyesi, birinci node |
| W25EXCNOD2 | Exchange Server SE (Mailbox) | Windows Server 2025 | DAG üyesi, ikinci node |
| W25WITNESS | File Share Witness | Windows Server 2025 | Exchange kurulu değil, sadece tanık |
| EXCDAG | Database Availability Group | – | IP-less DAG (Windows Server 2025) |
DAG adı EXCDAG, witness sunucu W25WITNESS‘tir. Tanık dizini W25WITNESS üzerinde C:\DAGFileShareWitnesses\EXCDAG, bu dizini yayınlayan paylaşımın adı ise EXCDAG.bakicubuk.com‘dur. Dizin adı ile paylaşım adının farklı olması normaldir; yazının sonundaki witness kontrollerinde bu ayrım önem kazanacak.
Domain bakicubuk.com, AD Site Default-First-Site-Name, işletim sistemi her iki node’da Windows Server 2025 Datacenter (OS Build 26100.33296) ve Exchange sürümü Exchange SE RTM, build 15.02.2562.017.
Her node’da iki adapter var: Ethernet0 MAPI (istemci) ağı, Ethernet1 ise replikasyon ağı. Bu ayrım, raporu yorumlarken önemli olacak.
1. Adım: HealthChecker.ps1 Hazırlığı
Scripti her iki node üzerinde de değil, yönetim yapacağınız tek bir Node üzerinde çalıştırmak yeterlidir. HealthChecker uzak sunuculardan da veri toplayabilir. Ben W25EXCNOD1 üzerinden ilerliyorum.
Öncelikle sunucuda bir çalışma klasörü oluşturalım (yoksa):
Windows PowerShell’i Run as administrator (Yönetici olarak çalıştır) ile açıp:
New-Item -Path "C:\Scripts" -ItemType Directory -Force
Scripti doğrudan resmi GitHub sürümünden indirin (her zaman en güncel sürümü çeker):
Invoke-WebRequest -Uri "https://github.com/microsoft/CSS-Exchange/releases/latest/download/HealthChecker.ps1" -OutFile "C:\Scripts\HealthChecker.ps1"
İndirilen dosya internetten geldiği için block işareti taşıyabilir. Çalıştırırken hata almamak adına engeli kaldırın:
Unblock-File -Path "C:\Scripts\HealthChecker.ps1"
Windows, internetten indirilen dosyalara güvenlik amacıyla Mark of the Web (MOTW) adı verilen bir işaret ekler. Bu işaret, dosyanın harici bir kaynaktan geldiğini belirtir ve PowerShell, imzalı olsa bile bu tür dosyaları çalıştırmadan önce ek güvenlik uyarısı verebilir ya da execution policy nedeniyle engelleyebilir. Unblock-File cmdlet’i bu işareti kaldırarak scriptin sorunsuz çalışmasını sağlar. Dosyanın kaynağına güvendiğinizden (bu örnekte Microsoft’un resmi GitHub deposundan indirildiğinden) emin olduğunuz için bu işaretlemeyi güvenle kaldırabilirsiniz.
İmza Doğrulaması
İnternetten indirilen bir scripti Exchange sunucusunda çalıştırmadan önce imzasını mutlaka doğrulayın. Status değeri Valid, imzalayan ise Microsoft Corporation olmalıdır.
Get-AuthenticodeSignature -FilePath "C:\Scripts\HealthChecker.ps1" | Select-Object Status, SignerCertificate | Format-List
İsterseniz oturumunuz için execution policy’yi geçici olarak esnetebilirsiniz (kalıcı değişiklik yapmadan):
Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned
PowerShell, imzasız veya harici scriptlerin çalıştırılmasını execution policy ile kontrol eder. Varsayılan olarak bir Windows Server’da bu politika Restricted veya RemoteSigned olabilir ve script çalıştırmayı engelleyebilir. Buradaki komutta önemli nokta -Scope Process parametresidir: bu, politikayı yalnızca o an açık olan PowerShell/EMS (Exchange Management Shell) oturumu için değiştirir. Oturumu kapattığınızda ayar otomatik olarak eski haline döner, yani sunucunun genel güvenlik politikasında kalıcı bir değişiklik yapmazsınız. RemoteSigned değeri ise yerel scriptlerin serbestçe, internetten inen scriptlerin ise yalnızca geçerli bir dijital imzaya sahipse çalışmasına izin verir. HealthChecker Microsoft imzalı olduğu için bu ayarla sorunsuz çalışır. Bu yaklaşım, sistem genelinde kalıcı bir politika gevşetmesi yapmadan işi güvenli biçimde halletmenizi sağlar.
2. Adım: DAG Genelinde Sağlık Kontrolü
Tek sunucu yerine DAG’daki tüm Exchange sunucularını tek seferde taramak istiyoruz.
Exchange Management Shell‘i Run as administrator (Yönetici olarak) açın ve çalışma klasörüne geçin:
Her iki node için veri toplama:
cd C:\Scripts
.\HealthChecker.ps1 -Server "W25EXCNOD1"
.\HealthChecker.ps1 -Server "W25EXCNOD2"
Script her sunucu için bir TXT ve bir XML dosyası üretir; iki node’lu bu ortamda C:\Scripts klasöründe toplam dört dosya oluşur.
- TXT dosyası: PowerShell’deki çıktının aynısıdır; e-postaya eklemek veya arşivlemek için pratiktir.
- XML dosyası: HTML rapor üretmek için kullanılan veri dosyasıdır. Windows’ta
.xmluzantısı Edge ile ilişkilendirildiği için Explorer’ın “Type” sütununda “Microsoft Edge HTML Document” görünebilir; dosya yine de XML’dir.
Alternatif: organizasyondaki tüm sunucuları otomatik tarama
Sunucu sayısı arttıkça tek tek yazmak yerine pipeline kullanmak daha pratiktir:
Exchange Management Shell‘i Run as administrator (Yönetici olarak) açın ve çalışma klasörüne geçin:
cd C:\Scripts
Get-ExchangeServer | Where-Object {$_.AdminDisplayVersion -Match "^Version 15"} | .\HealthChecker.ps1
Çıktılar bu yöntemde de aynıdır; yalnızca dosya adındaki zaman damgası değişir.
Sadece DAG üyelerini taramak isterseniz:
cd C:\Scripts
(Get-DatabaseAvailabilityGroup EXCDAG).Servers | ForEach-Object { .\HealthChecker.ps1 -Server $_.Name }
Çıktılar bu yöntemde de aynıdır; yalnızca dosya adındaki zaman damgası değişir.
Birleşik HTML raporu üretme
DAG’da HealthChecker‘ın asıl faydası burada ortaya çıkıyor. Toplanan XML dosyalarından tek bir karşılaştırmalı rapor üretiliyor ve iki node’un ayarları yan yana geliyor.
cd C:\Scripts
.\HealthChecker.ps1 -BuildHtmlServersReport -HtmlReportFile "EXCDAG-Report.html"
.\EXCDAG-Report.html
-BuildHtmlServersReport parametresi yeni veri toplamaz; yalnızca çalışma klasöründe daha önce oluşturulmuş ...-HealthChecker-*.xml dosyalarını okuyup HTML’e dönüştürür. Bu yüzden raporu üretmeden önce sunucu için en az bir kez -Server parametresiyle scripti çalıştırıp XML çıktısı almış olmanız gerekir. Elde XML yoksa rapor boş çıkar veya hata alırsınız.-HtmlReportFile parametresini vermezseniz script çıktıyı tarih-saat damgalı olarak ExchangeAllServersReport-yyyyMMddHHmmss.html biçiminde otomatik adlandırır. Dosyaya kendi vereceğiniz sade bir isim, özellikle raporları arşivlerken işinizi kolaylaştırır.Yukarıdaki iki satırı tek seferde yapıştırırsanız önce .\HealthChecker.ps1 -BuildHtmlServersReport -HtmlReportFile "EXCDAG-Report.html komutunu çalışır. Bu satır tamamlandıktan sonra Enter tuşuna basarak .\EXCDAG-Report.html komutunun çalışmasını sağlayabilirsiniz.
XML dosyalarını ayrı bir klasörde topluyorsanız:
cd C:\Scripts
.\HealthChecker.ps1 -BuildHtmlServersReport -XMLDirectoryPath "C:\Scripts\Reports" -HtmlReportFile "EXCDAG-Report.html"
Sık kullanılan parametreler
| Parametre | İşlevi | Ne Zaman Kullanılır |
|---|---|---|
-Server |
Belirtilen sunucudan veri toplar | Tek node taramasında |
-BuildHtmlServersReport |
XML’lerden birleşik HTML rapor üretir | Veri toplama sonrası |
-HtmlReportFile |
Rapor dosya adını belirler | Rapor üretirken |
-XMLDirectoryPath |
XML’lerin bulunduğu klasör | Raporlar ayrı klasördeyse |
-VulnerabilityReport |
Açık raporunu JSON olarak çıkarır | Güncelleme planlarken |
-AnalyzeDataOnly |
Mevcut XML’leri yeniden analiz eder | Veri toplamadan tekrar bakarken |
-MailboxReport |
Posta kutusu dağılım raporu üretir | Kapasite planlamasında |
-ScriptUpdateOnly |
Script sürümünü kontrol eder | Çalıştırmadan önce |
Açık (vulnerability) raporu
cd C:\Scripts
.\HealthChecker.ps1 -VulnerabilityReport
3. Adım: Raporu Okuma
HealthChecker çıktısı renk kodludur.
| Renk | Anlamı | Aksiyon |
|---|---|---|
| Gri | Bilgilendirme | Aksiyon gerekmez |
| Yeşil | Önerilerle uyumlu | Aksiyon gerekmez |
| Sarı | Uyarı | Planlı bakımda düzeltin |
| Kırmızı | Kritik | En kısa sürede düzeltin |
DAG ortamında raporu okurken üç şeye özellikle dikkat edin:
- Kırmızı satırların ikisinde de aynı olması. Bir node’da kırmızı, diğerinde yeşil olan bir madde varsa orada yapılandırma kayması var demektir.
- Donanım ve bellek farkları. İki node’un RAM, işlemci ve NIC yapılandırması aynı olmalıdır. Aksi halde failover sonrası performans düşer.
- Exchange build numaraları. İki node’un build numarası birbirinden farklıysa, güncelleme çalışmasına başlamadan önce bunu not edin.
Build numaralarını hızlıca karşılaştırmak için:
Get-ExchangeServer | Format-List Name,Edition,AdminDisplayVersion
Get-Command Exsetup.exe | ForEach-Object {$_.FileVersionInfo}
4. Adım: EXCDAG Raporunun Çıktısı
Şimdi asıl konuya geliyoruz: raporda ne çıktı ve bunlar ne anlama geliyor.
Servers Overview
Raporun en üstündeki özet tablo, iki node’u yan yana koyuyor:
| Alan | W25EXCNOD1 | W25EXCNOD2 |
|---|---|---|
| Exchange Version | Exchange SE RTM | Exchange SE RTM |
| Build Number | 15.02.2562.017 | 15.02.2562.017 |
| Product Name | Windows Server 2025 Datacenter | Windows Server 2025 Datacenter |
| .NET Framework | 4.8.1 (uyumlu) | 4.8.1 (uyumlu) |
| Hardware Type | VMware | VMware |
| Logical Cores | 2 | 2 |
| Physical Memory | 32 GB | 32 GB |
| Vulnerability Detected | True | True |
İlk bakışta görülen şu: iki node birebir aynı. DAG açısından bu iyi haber, yapılandırma kayması yok. Kötü haber ise her iki node’da da güvenlik açığı tespit edilmiş olması.
Kırmızı Bulgular
Raporda dört kırmızı madde var ve dördü de her iki node’da aynı.
| # | Bulgu | Raporun Söylediği | Neden Önemli |
|---|---|---|---|
| 1 | PageFile | Otomatik yönetiliyor, boyut 0 MB. Önerilen: 8192 MB (32768 MB’ın %25’i) | Bellek baskısı altında Exchange süreçleri beklenmedik şekilde sonlanabilir, store crash dump alınamaz |
| 2 | TCPKeepAlive | Not Set. Değer yoksa KeepAliveTime varsayılan olarak 2 saat | Firewall ve load balancer’lar bağlantıyı önce düşürür, Outlook istemcilerinde kopmalar görülür |
| 3 | Disable IPv6 Correctly | IPv6 bazı NIC ayarlarında kapalı ama tam kapalı değil. DisabledComponents = 0 | Exchange yarı devre dışı IPv6’yı desteklemez; DAG’da cluster iletişimi de IPv6 kullanır |
| 4 | Security Vulnerabilities | 29 adet CVE listeleniyor | Sunucu, kapatılmamış açıklarla çalışıyor |
Üçüncü maddeye dikkat etmek gerekiyor, çünkü sık yanlış anlaşılıyor. Registry tarafı aslında doğru: DisabledComponents değeri 0, yani IPv6 devre dışı bırakılmamış. Sorun NIC seviyesinde: adapter özelliklerinden IPv6 binding’i (ms_tcpip6) kaldırılmış. Ortaya yarı yapılandırılmış bir durum çıkıyor ve Exchange bunu desteklemiyor. Microsoft’un önerisi IPv6’yı hiç kapatmamaktır.
Sarı Bulgular
| # | Bulgu | Raporun Söylediği | Yorum |
|---|---|---|---|
| 5 | Not on the latest SU | Son Security Update kurulu değil | Build 15.02.2562.017; güncel sürüm SU9 (15.2.2562.46) |
| 6 | Visual C++ 2012 x64 | Redistributable eski (11.0.50727) | Exchange özellikle 2012 ve 2013 sürümlerini arar, yenileri yerine geçmez |
| 7 | Visual C++ 2013 x64 | Redistributable eski (12.0.21005) | Aynı şekilde güncellenmeli |
| 8 | Sleepy NIC Disabled | False, her iki adapter için | Ağ kartı güç tasarrufu, gecikme ve kopma üretir |
| 9 | Certificate status | PendingRequest | Tamamlanmamış bir sertifika isteği duruyor, hiçbir servise bağlı değil |
| 10 | AMSI Request Body Scanning | False | İstek gövdesi taraması kapalı |
| 11 | Edition | StandardEvaluation, 178 gün kaldı | Süre dolduğunda Exchange servisleri durur |
| 12 | Server Pending Reboot | Sadece W25EXCNOD2’de True | Bekleyen restart, SU kurulumunu bozabilir |
| 13 | Physical Memory | 32 GB, öneri 128 GB | Üretim için geçerli bir öneri, lab için aksiyon gerekmez |
| 14 | Known Issue Detected | Hybrid ortamda online archiving sorunu | Sadece hybrid yapılandırmada geçerli |
On birinci madde teknik bir hata gibi durmuyor ama lab’ın ömrünü belirleyen madde bu. Deneme süresi dolduğunda Exchange servisleri durur, bu yüzden bir kenara not etmekte fayda var.
On ikinci madde ise DAG açısından anlamlı: iki node arasındaki tek fark bu. Bekleyen bir restart varken güvenlik güncellemesi kurmak, kurulumun yarıda kalmasına yol açabilir.
Uyumlu Alanlar
Rapor sadece sorunları göstermiyor. Aşağıdaki kalemler yeşil, yani öneriyle uyumlu:
| Alan | Durum |
|---|---|
| .NET Framework | 4.8.1 |
| Power Plan | High performance |
| TLS 1.0 / 1.1 | Disabled |
| TLS 1.2 / 1.3 | Enabled |
| RSS Enabled | True (her iki adapter) |
| Extended Protection | Enabled (Any VDir) |
| SerializedDataSigning | Enabled |
| Exchange Emergency Mitigation Service | Enabled, pattern servisi erişilebilir |
| SMB1 | Yüklü değil, engellenmiş |
| Auth Certificate | Geçerli, sunucuda mevcut |
Güvenlik Açıkları
Vulnerability bölümü build 15.02.2562.017 üzerinde açık olan 29 CVE listeliyor:
CVE-2021-1730, CVE-2025-25005, CVE-2025-25006, CVE-2025-25007, CVE-2025-33051,
CVE-2025-53782, CVE-2025-59248, CVE-2025-59249, CVE-2025-64666, CVE-2025-64667,
CVE-2026-21527, CVE-2026-42897, CVE-2026-45500, CVE-2026-45501, CVE-2026-45502,
CVE-2026-45503, CVE-2026-45504, CVE-2026-47631, CVE-2026-55005, CVE-2026-55006,
CVE-2026-55008, CVE-2026-55009, CVE-2026-62910, CVE-2026-62911, CVE-2026-62912,
CVE-2026-62913, CVE-2026-62914, CVE-2026-62915, CVE-2026-65813
Listenin ilk maddesi olan CVE-2021-1730 diğerlerinden ayrışıyor. Bu açık bir Security Update ile değil, Download Domains yapılandırmasıyla kapatılıyor. Raporda Enable Download Domains = False olarak görünüyor. Diğer 28 CVE ise güncel SU kurulumuyla kapanacak.
Raporun Göstermediği Bir Ayrıntı
HealthChecker bunu bir bulgu olarak işaretlemiyor, ancak ağ bölümüne dikkatli bakınca görülüyor: Ethernet1 (192.168.2.x) replikasyon ağı olmasına rağmen her iki node’da da Registered In DNS = True. Üstelik W25EXCNOD2‘de bu arayüzde bir DNS sunucusu da tanımlı.
DAG’da replikasyon NIC’lerinin DNS’e kaydolmaması, gateway ve DNS sunucusu tanımlanmaması önerilir. Aksi halde istemciler MAPI trafiğini replikasyon ağına yönlendirmeye çalışabilir. Raporu okurken, scriptin renklendirmediği satırlara da bakmakta fayda var.
Get-DnsClient | Select-Object InterfaceAlias, RegisterThisConnectionsAddress
Get-DatabaseAvailabilityGroupNetwork -Identity EXCDAG | Format-List Name,Subnets,ReplicationEnabled,MapiAccessEnabled
5. Adım: DAG’a Özel Sağlık Kontrolleri
HealthChecker‘ın kapsamadığı, DAG’a özel kontroller aşağıdadır. Her birinin beklenen değeri tabloda verilmiştir.
| Kontrol | Komut | Beklenen Değer |
|---|---|---|
| DAG yapılandırması | Get-DatabaseAvailabilityGroup |
Tüm sunucular OperationalServers listesinde |
| Replikasyon sağlığı | Test-ReplicationHealth |
Tüm testler Passed |
| Kopya durumu | Get-MailboxDatabaseCopyStatus |
Healthy / Mounted |
| Kopya kuyrukları | CopyQueueLength / ReplayQueueLength |
0 |
| İndeks durumu | ContentIndexState |
Healthy veya NotApplicable |
| Cluster node durumu | Get-ClusterNode |
Her iki node Up |
| Quorum yapılandırması | Get-ClusterQuorum |
Node and File Share Majority |
| Witness durumu | Get-ClusterResource |
State: Online |
Get-MailboxDatabaseCopyStatus çıktısında ContentIndexState değeri NotApplicable görünür. Ayrı bir içerik indeksi (Search Foundation katalogu) kullanılmadığından kontrol edilecek bir durum da kalmamıştır; bu yüzden NotApplicable beklenen sonuçtur, bir arıza değildir. Healthy değerini yalnızca Exchange 2016 ve 2019 ortamlarında görürsünüz.DAG yapılandırması ve witness durumu
Get-DatabaseAvailabilityGroup EXCDAG -Status | Format-List Name,Servers,WitnessServer,WitnessDirectory,PrimaryActiveManager,OperationalServers
OperationalServers alanında her iki node da görünmelidir. Bir node eksikse, o node cluster’dan düşmüş demektir.
Replikasyon sağlığı
Test-ReplicationHealth -Identity W25EXCNOD1
Test-ReplicationHealth -Identity W25EXCNOD2
Sadece başarısız olanları görmek için:
Test-ReplicationHealth -Identity W25EXCNOD1 | Where-Object {$_.Result.ToString() -ne "Passed"}
Test-ReplicationHealth -Identity W25EXCNOD2 | Where-Object {$_.Result.ToString() -ne "Passed"}
.ToString() şarttır. Result alanı düz metin değil bir enum değeri tuttuğu için doğrudan "Passed" ile karşılaştırıldığında filtre hiçbir satırı elemez ve komut, sadece başarısızları göster dense de bütün testleri listeler. Doğru yazımıyla, her şey yolundaysa komut hiçbir çıktı üretmez — boş çıktı burada iyi haberdir.Veritabanı kopya durumu
Get-MailboxDatabaseCopyStatus * | Format-Table Name,Status,CopyQueueLength,ReplayQueueLength,ContentIndexState -AutoSize
Aktif kopyaların hangi node’da olduğunu görmek için:
Get-MailboxDatabaseCopyStatus * | Where-Object {$_.Status -eq "Mounted"} | Format-Table Name,MailboxServer,ActiveCopy -AutoSize
Bu çıktı, bir sonraki yazıda hangi node’dan başlayacağımızı belirleyecek: güncelleme her zaman pasif node’dan başlar.
Cluster ve Quorum durumu
Get-ClusterNode
Get-ClusterQuorum | Format-List *
Get-ClusterResource
İki node’lu bir DAG’da Quorum modeli Node and File Share Majority olmalı ve witness kaynağı Online görünmelidir.
Get-ClusterQuorum komutunu sade çalıştırdığınızda yalnızca Cluster adını ve Quorum kaynağını gösteren iki sütun döner; Quorum modeli varsayılan görünümde yer almaz. Format-List * ile tüm alanları açtığınızda QuorumType alanını görürsünüz. İki node ve bir File Share Witness’tan oluşan bu yapıda beklenen değer NodeAndFileShareMajority‘dir.File Share Witness erişilebilirliği
Get-ClusterResource | Where-Object {$_.ResourceType -eq "File Share Witness"} |
Format-List Name,State,OwnerNode
Test-Path ile ölçmeyin. File Share Witness paylaşımının erişim izinleri yalnızca cluster ad nesnesine (<DAGAdı>$ bilgisayar hesabı) verilir; bu yüzden yönetici hesabıyla çalıştırılanTest-Path, witness çalışır durumdayken bile False döner. Ayrıca WitnessDirectory değeri diskteki klasörü (C:\DAGFileShareWitnesses\EXCDAG) gösterirken paylaşımın adı EXCDAG.bakicubuk.com‘dur; klasör adından paylaşım yolu türetmek de yanlış sonuç verir. Doğru gösterge cluster kaynağının kendi durumudur: State değeri Online ise witness erişilebilir demektir.Genel sunucu sağlığı
Get-ServerHealth -Identity W25EXCNOD1 | Where-Object {$_.AlertValue -ne "Healthy"}
Get-ServerHealth -Identity W25EXCNOD2 | Where-Object {$_.AlertValue -ne "Healthy"}
Bu komut, durumu Healthy olmayan tüm monitör tanımlarını listelediği için çıktı ilk bakışta uzun ve ürkütücü görünür. Satırlara bakarken State sütununa dikkat edin: değeri NotApplicable ise o monitör henüz hiç veri toplamamış demektir, yani gerçek bir alarm değildir. Unknown değeri de aynı şekilde ölçüm yok anlamına gelir. Gerçekten müdahale gerektiren durumları görmek için özet rapora bakmak daha doğrudur:
Sağlık Kontrolü Kontrol Listesi
| # | Kontrol | Beklenen Sonuç |
|---|---|---|
| 1 | HealthChecker script sürümü güncel |
En son sürüm |
| 2 | Script imzası doğrulandı | Valid / Microsoft Corporation |
| 3 | Her iki node için veri toplandı | 2 XML + 2 TXT |
| 4 | Birleşik HTML rapor üretildi | Karşılaştırmalı çıktı |
| 5 | Kırmızı bulgular listelendi | 4 kalem tespit edildi |
| 6 | Sarı bulgular listelendi | 10 kalem tespit edildi |
| 7 | İki node karşılaştırıldı | Tek fark: pending reboot |
| 8 | Test-ReplicationHealth temiz | Tüm testler Passed |
| 9 | Quorum ve witness sağlıklı | Online |
| 10 | Vulnerability raporu alındı | 29 CVE listelendi |
Düzenli Sağlık Kontrolü
Sağlık kontrolünü sadece güncelleme öncesinde değil, düzenli aralıklarla da yapmanızı öneririm. Aşağıdaki komutla haftalık çalışan bir zamanlanmış görev oluşturabilirsiniz.
Burada dikkat edilmesi gereken bir nokta var: HealthChecker.ps1 Exchange Management Shell ister. Zamanlanmış görev düz PowerShell.exe ile başlatıldığında Exchange cmdlet’leri yüklü olmaz ve rapor eksik veriyle üretilir. Bu yüzden görevin komutunda önce Exchange ortamını yüklüyoruz:
$cmd = ". 'C:\Program Files\Microsoft\Exchange Server\V15\bin\RemoteExchange.ps1'; " +
"Connect-ExchangeServer -auto; " +
"C:\Scripts\HealthChecker.ps1 -Server W25EXCNOD1,W25EXCNOD2"
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" `
-Argument "-NonInteractive -ExecutionPolicy Bypass -Command `"$cmd`"" `
-WorkingDirectory "C:\Scripts"
$trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday -At 06:00
Register-ScheduledTask -TaskName "Exchange HealthChecker - EXCDAG" `
-Action $action -Trigger $trigger -RunLevel Highest -User "BAKICUBUK\svc-healthchecker" -Password "********"
C:\Scripts altında XML ve TXT dosyalarının oluştuğunu doğrulayın.Sonuç
EXCDAG ortamında yaptığımız sağlık kontrolü, 4 Kırmızı ve 10 Sarı bulgu ortaya çıkardı. İki node’un yapılandırması neredeyse birebir aynı olduğu için yapılandırma kayması yok; tek fark W25EXCNOD2 üzerindeki bekleyen restart.
DAG ortamında HealthChecker.ps1, iki node arasındaki farkları tek bir raporda görmenizi sağlıyor. Ancak scriptin kapsamı sunucu düzeyinde kalıyor; replikasyon sağlığı, Quorum ve Witness durumu gibi DAG’a özel konuları ayrıca kontrol etmeniz gerekiyor. Bir de scriptin renklendirmediği satırlara bakmakta fayda var; replikasyon NIC’inin DNS kaydı buna iyi bir örnek.
Bir sonraki yazıda bu bulguları sırayla kapatacağız: hangi düzeltmenin restart gerektirdiği, hangilerinin organizasyon genelinde bir kez uygulandığı, node’ların hangi sırayla bakıma alınacağı ve son olarak SU9 (KB5121573) kurulumu.
İlgili Yazılar
- Exchange Server SE Sağlık Kontrolü: HealthChecker.ps1 ile Uçtan Uca
- Exchange Server SE Güncelleme: HealthChecker ile Tespit Edilen Açıkları Kapatma
- Microsoft Exchange Server SE DAG Serisi Bölüm 1: DAG Nedir ve Mimarisi Nasıl Çalışır?
- Microsoft Exchange Server SE DAG Serisi Bölüm 3: DAG Oluşturma ve Node Ekleme
- Microsoft Exchange Server SE DAG Serisi Bölüm 4: Veritabanı Kopyaları, Switchover ve Yönetim
- Exchange Server Build Numbers
Başka bir yazımızda görüşmek dileğiyle…

