Exchange Server SE Sağlık Kontrolü: HealthChecker.ps1 ile Uçtan Uca

Merhaba

Exchange ortamında bir sorun yaşadığınızda, bir CU/SU güncellemesi öncesinde ya da yeni bir sunucu eklemeden önce ilk yapılması gereken şeylerden biri sunucunun sağlık durumunu ölçmektir. Microsoft’un CSS-Exchange ekibi tarafından geliştirilen ve düzenli güncellenen HealthChecker.ps1 scripti, tam da bu iş için elimizdeki en iyi araç. Bu yazıda scripti Exchange Server SE üzerinde nasıl indirip çalıştıracağımızı, HTML raporu nasıl üreteceğimizi ve çıktıları nasıl yorumlayacağımızı adım adım anlatacağım.

HealthChecker Neden Kullanılır?

Script, performans sorunlarına ve uzun süreli problemlere yol açan yaygın yapılandırma hatalarını tespit eder; ayrıca sunucu hakkında hızlıca bilgi toplamanızı sağlar.

Şu senaryolarda özellikle işinize yarar:

  • Exchange Server’da bir sorun/incident yaşandığında
  • Exchange CU (Cumulative Update ) veya güvenlik güncellemesi Exchange SU (Security Update) uygulamadan önce
  • Hybrid yapılandırma sihirbazını çalıştırmadan önce
  • DAG (Database Availability Group) kurmadan önce
  • Ortama yeni bir Exchange sunucusu eklemeden önce

Desteklenen sürümler: Exchange Server 2016, 2019 ve Subscription Edition (SE). SE ortamında mutlaka scriptin en güncel sürümünü kullanın; eski sürümler yeni SE build numaralarını tanımayıp hatalı “out of date” uyarısı verebilir.

Scripti İndirme ve Hazırlık

Öncelikle sunucuda bir çalışma klasörü oluşturalım (yoksa):

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ı

Script Microsoft tarafından dijital olarak imzalanmıştır. Çalıştırmadan önce imzanın geçerli ve Microsoft’a ait olduğunu doğrulamak iyi bir alışkanlıktır:

Get-AuthenticodeSignature -FilePath "C:\Scripts\HealthChecker.ps1" | Select-Object Status, SignerCertificate | Format-List

Status alanının Valid göründüğünden emin olun.

İsterseniz oturumunuz için execution policy’yi geçici olarak esnetebilirsiniz (kalıcı değişiklik yapmadan):

Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned

burada
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 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.

Scripti Çalıştırma

Exchange Management Shell‘i Run as administrator (Yönetici olarak) açın ve çalışma klasörüne geçin:

cd C:\Scripts

Not: Scripti çalıştıracak hesabın Organization Management rol grubunda ve sunucuda Local Administrator olması gerekir. Bu iki koşul, OS seviyesindeki kontrollerin de eksiksiz toplanması için şarttır.

Parametre vermeden çalıştırırsanız script yerel sunucuya (localhost) karşı çalışır:

.\HealthChecker.ps1

Script çalıştıktan sonra herhangi bir hata almadıysanız işlem tamamlanır ve ekranda sonuç görüntülenir.

Script çalıştıktan sonra scriptin bulunduğu klasörde iki dosya üretir:

  • TXT dosyası: PowerShell’deki çıktının aynısı; e-postaya eklemek veya arşivlemek için pratiktir.
  • XML dosyası: HTML rapor üretmek için kullanılan veri dosyası.

Belirli Bir Sunucuyu Hedefleyerek Çalıştırma

Aynı Exchange Management Shell oturumundaysanız ve C:\Scripts klasöründeyseniz doğrudan hedef sunucuyu belirterek çalıştırabilirsiniz. Farklı bir oturum açtıysanız önce klasöre geçin:

cd C:\Scripts

Not: Scripti çalıştıracak hesabın Organization Management rol grubunda ve sunucuda Local Administrator olması gerekir. Bu iki koşul, OS seviyesindeki kontrollerin de eksiksiz toplanması için şarttır.

Belirli bir sunucuyu hedeflemek için -Server parametresini kullanın:

.\HealthChecker.ps1 -Server "W25EXCSE"

Script çalıştıktan sonra herhangi bir hata almadıysanız sonuç ekranı gelir. Ardından sunucu üzerindeki yapılandırma ve eksikliklerle ilgili bütün adımlar sırayla ekranda görüntülenir.

Script çalıştıktan sonra herhangi bir hata almadıysanız sonuç ekranı gelir. Ardından sunucu üzerindeki yapılandırma ve eksikliklerle ilgili bütün adımlar sırayla ekranda görüntülenir.

Script çalıştıktan sonra scriptin bulunduğu klasörde iki dosya üretir:

  • TXT dosyası: PowerShell’deki çıktının aynısı; e-postaya eklemek veya arşivlemek için pratiktir.
  • XML dosyası: HTML rapor üretmek için kullanılan veri dosyası.

HTML Sağlık Raporu Üretme

Exchange Management Shell‘i Run as administrator (Yönetici olarak) açın ve çalışma klasörüne geçin:

cd C:\Scripts

Not: Scripti çalıştıracak hesabın Organization Management rol grubunda ve sunucuda Local Administrator olması gerekir. Bu iki koşul, OS seviyesindeki kontrollerin de eksiksiz toplanması için şarttır.

XML çıktısını okunabilir bir HTML rapora dönüştürmek için:

.\HealthChecker.ps1 -BuildHtmlServersReport -HtmlReportFile "W25EXCSE-Report.html"

Klasörde bir HTML rapor dosyası oluşur. Raporu açtığınızda renk kodlarıyla karşılaşırsınız:

  • Gri: Bilgilendirme amaçlı öğeler
  • Yeşil: Önerilerle uyumlu ayarlar
  • Sarı: Göz atmanız gereken uyarılar
  • Kırmızı: Performans sorununa yol açabilecek, öncelikli düzeltilmesi gereken ayarlar

Önce kırmızı satırları ele alın; bunlar en kritik olanlardır.

Birden Fazla Sunucu için Toplu Rapor

Ortamınızda birden çok Exchange sunucusu varsa, her biri için scripti ayrı ayrı çalıştırıp (her çalıştırma bir XML üretir) ardından tek bir birleşik rapor alabilirsiniz:

.\HealthChecker.ps1 -Server "W25EXCSE"

Ardından parametre vermeden -BuildHtmlServersReport ile klasördeki tüm XML dosyalarını birleştirin:

.\HealthChecker.ps1 -BuildHtmlServersReport

Bu komut varsayılan olarak ExchangeAllServersReport-yyyyMMddHHmmss.html adında bir dosya üretir.

Tüm Exchange sunucularını tek seferde tarayıp raporu otomatik açmak için:

Get-ExchangeServer | Where-Object {$_.AdminDisplayVersion -Match "^Version 15"} | .\HealthChecker.ps1
.\HealthChecker.ps1 -BuildHtmlServersReport -HtmlReportFile "ExchangeAllServersReport.html"
.\ExchangeAllServersReport.html

Faydalı Ek Parametreler

Birkaç parametre SE ortamında işinizi kolaylaştırır:

# Sadece scriptin güncel sürümünü kontrol edip günceller (EMS ve yetki gerekmez)

.\HealthChecker.ps1 -ScriptUpdateOnly

# Ortamdaki tüm sunucular için güvenlik açığı (vulnerability) raporunu json olarak çıkarır

.\HealthChecker.ps1 -VulnerabilityReport

# Belirtilen sunucu için mailbox raporu üretir

.\HealthChecker.ps1 -MailboxReport -Server "W25EXCSE"

# Mevcut XML dosyalarını yeniden analiz eder (yeni veri toplamadan)

.\HealthChecker.ps1 -AnalyzeDataOnly

Sık Karşılaşılan Uyarılar ve Çözümleri

HealthChecker raporunda sarı (uyarı) ve kırmızı (hata) satırlarla sık karşılaşılır. Aşağıda en yaygın olanları ve nasıl gidereceğinizi bulabilirsiniz. Ortamınıza göre bu satırların bir kısmı çıkmayabilir.

TCP/IP Settings (KeepAliveTime) — Not Set

Bu uyarı, KeepAliveTime kayıt defteri (registry) değerinin tanımlı olmadığını gösterir. Değer tanımlı değilse Windows varsayılan olarak 2 saat kullanır; bu da güvenlik duvarı ve yük dengeleyici (load balancer) gibi ağ cihazlarıyla Exchange arasında bağlantı kopması ve performans sorunlarına yol açabilir. Microsoft, bu değerin 15 ila 30 dakika (milisaniye cinsinden 900000-1800000) arasında olmasını önerir. Düzeltmek için:

New-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\TcpIp\Parameters" -Name "KeepAliveTime" -PropertyType DWORD -Value 1800000 -Force

Değişikliğin etkin olması için sunucunun yeniden başlatılması gerekir. Ayrıca yük dengeleyici ve güvenlik duvarındaki zaman aşımı değerlerinin Exchange’den daha yüksek olduğundan emin olun (örneğin güvenlik duvarı 40 dk, load balancer 35 dk, Exchange 30 dk).

Power Plan — Balanced (Error)

Sunucunun güç planı “Balanced” (Dengeli) olarak ayarlıysa kırmızı hata alırsınız. Exchange, işlemcinin sürekli tam performansta çalışmasını beklediği için güç planının “High Performance” (Yüksek Performans) olması gerekir. Denetim Masası > Sistem ve Güvenlik > Güç Seçenekleri yolundan değiştirebilir ya da PowerShell ile hızlıca ayarlayabilirsiniz:

powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c

Bu GUID, Windows’un yerleşik “High Performance” planına aittir. Sanal makinelerde güç planı hipervizör tarafından yönetiliyorsa yine de misafir işletim sisteminde bu ayarı yapmanız önerilir.

Page File Size — Warning

Bu uyarı, sayfa dosyası (page file) boyutunun önerilen değerde olmadığını belirtir. Exchange için önerilen boyut, toplam fiziksel RAM + 10 MB şeklindedir (örneğin 20 GB RAM için 20490 MB). Sistem tarafından yönetilen otomatik boyut yerine bu değeri sabit (initial ve maximum aynı) olarak elle tanımlamanız beklenir. Sistem Özellikleri > Gelişmiş > Performans > Sanal Bellek yolundan ayarlayabilirsiniz. Çok yüksek RAM’e sahip sunucularda Exchange’in kendi hesaplama mantığı devreye girer; yine de raporun önerdiği değeri esas alın.

.NET Framework — Not on recommended version

Kurulu .NET Framework sürümü, o Exchange sürümü/CU’su için önerilen sürümle uyuşmuyorsa uyarı verilir. Yanlış .NET sürümü performans ve kararlılık sorunlarına yol açabilir. Exchange’in çalıştığınız sürümü için desteklenen .NET Framework matrisini kontrol edip uygun sürümü kurmanız gerekir. .NET güncellemesini her zaman ilgili Exchange CU’suyla uyumlu şekilde planlayın.

Visual C++ Redistributable — Outdated

Exchange’in ihtiyaç duyduğu Visual C++ Redistributable paketlerinin güncel olmadığını gösterir. En güncel sürümleri Microsoft’un resmi sayfasından indirip kurarak bu uyarıyı giderebilirsiniz.

RSS Enabled — False (Warning) / Sleepy NIC

Ağ kartında RSS (Receive Side Scaling) devre dışıysa ya da NIC güç tasarrufu seçenekleri açıksa uyarı alırsınız. Yüksek ağ trafiğinin birden fazla işlemci çekirdeğine dağıtılabilmesi için RSS’in etkin, NIC güç yönetiminin ise kapalı olması önerilir. Bu ayarları ağ bağdaştırıcısının gelişmiş özelliklerinden yapabilirsiniz.

Vulnerable to CVE-XXXX-XXXXX

Bu kırmızı satırlar, sunucunun bilinen bir güvenlik açığına karşı savunmasız olduğunu gösterir ve genellikle eksik bir güvenlik güncellemesine (SU) işaret eder. En güncel Exchange CU ve SU’yu uygulayarak bu açıkları kapatmanız kritik önem taşır. Güncelleme sonrası raporu yeniden çalıştırarak satırların temizlendiğini doğrulayın.

Genel öneri: Bir uyarıyı giderdikten sonra scripti tekrar çalıştırıp ilgili satırın yeşile döndüğünü teyit edin. Registry veya güç planı gibi bazı değişiklikler yeniden başlatma gerektirir.

Sonuç

HealthChecker.ps1, Exchange Server SE ortamınızın sağlığını ölçmenin en pratik ve güvenilir yoludur. Microsoft mühendisleri tarafından düzenli güncellendiği için hem yeni build’leri hem de güncel güvenlik açıklarını takip eder. Raporda her şey yeşilse sorun yok; sarı satırlara göz atın, kırmızı satırları ise mutlaka giderin. Özellikle bir güncelleme veya migration öncesi bu kontrolü rutininize almanızı tavsiye ederim.

Başka bir yazımızda görüşmek dileğiyle…

Bir yanıt yazın

Başa Dön