Örnek Senaryo
Aşağıda vereceğim örnek, Microsoft Exchange Server üzerinde çalışan Search servisleri için yazılmıştır. Ancak mantık aynı şekilde SQL Server, IIS, DNS, AD, SCCM gibi pek çok hizmete kolayca uygulanabilir.
AD Replication (1311,2087,1865)
DNS sorunları (4015,4004)
IIS uygulama hataları
SQL Server servis ya da query timeout logları
SCCM client hataları
Tek yapılması gereken:
Event ID listesini değiştirmek,
Servis adlarını özelleştirmek,
Rapor başlığını değiştirmek.
Exchange PowerShell cmdlet’lerine bağlanmamızı sağlar.
![]()
Kritik Search servislerinin running olup olmadığı kontrol edilir.
$services = Get-Service MSExchangeFastSearch, HostControllerService | Select DisplayName, Status, StartType
Bu yapı, son 24 saate ait kritik Search loglarını filtreler. Hangi event id yi raporlamak istiyorsanız buraya yazmalısınız.
Event ID’lerin anlamları:
| Event ID | Açıklama |
|---|---|
| 1009 | Content indexing hatası |
| 1012 | Log alanı dolu, veri kaybı olabilir |
| 109-110 | FAST Search servis uyarıları |
| 123-124 | Arama bileşeni, içerik index uyarıları |
$eventErrors = Get-WinEvent -LogName "Application" | Where-Object {
$_.TimeCreated -gt (Get-Date).AddDays(-1) -and
($_.Id -in 1009,1012,109,110,123,124)}
Veriler, estetik ve okunabilir HTML tablosuna dönüştürülür.
$html = $eventErrors | ConvertTo-Html -Property TimeCreated, Id, ProviderName, Message
Oluşturulan HTML rapor, bir sistem e-posta adresi üzerinden yöneticilere gönderilir.
Send-MailMessage -From ... -To ... -SmtpServer ... -BodyAsHtml -Body $fullHtml
<#
.SYNOPSIS
Exchange Server Search servisleri ve ilgili Event Log'ları kontrol ederek HTML formatında sağlık raporu oluşturur ve e-posta ile gönderir.
.DESCRIPTION
Bu script, Exchange Server üzerinde çalışan MSExchangeFastSearch ve HostControllerService servislerinin durumunu kontrol eder,
son 24 saat içerisinde oluşan kritik Search Event ID'lerini (1009, 1012, 109, 110, 123, 124) analiz eder ve HTML tabanlı rapor olarak üretir.
Oluşturulan rapor, sistem yöneticisinemail iletir.
.AUTHOR
Elif Uçhan
.NOTES
Script, yerel SMTP relay yapılandırması gerektirir.
.LASTUPDATED
16/07/2025
#>
. 'C:Program FilesMicrosoftExchange ServerV15binRemoteExchange.ps1'
Connect-ExchangeServer -auto -ClientApplication:ManagementShell
$reportTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$html = @"
<h2>Exchange Search Service Health Report</h2>
<p>Rapor zamani: $reportTime</p>
"@
$services = Get-Service MSExchangeFastSearch, HostControllerService | Select DisplayName, Status, StartType
$serviceHtml = $services | ConvertTo-Html -Fragment -PreContent "<h3>1. Search Servis Durumu</h3>"
$html += $serviceHtml
$eventErrors = Get-WinEvent -LogName "Application" | Where-Object {
$_.TimeCreated -gt (Get-Date).AddDays(-1) -and
($_.Id -in 1009,1012,109,110,123,124)
} | Select TimeCreated, Id, ProviderName, Message
if ($eventErrors.Count -gt 0) {
$eventHtml = $eventErrors | ConvertTo-Html -Property TimeCreated, Id, ProviderName, Message -Fragment -PreContent "<h3>2. Search ve ilgili Hatalar (Event Log)</h3>"
} else {
$eventHtml = "<h3>2. Search ve ilgili Hatalar (Event Log)</h3><p><strong>Son 24 saatte 1009,1012,109,110,123,124 Event ID'leri icin log bulunamadi.</strong></p>"
}
$html += $eventHtml
$fullHtml = @"
<html>
<head>
<style>
body { font-family: Arial; font-size: 13px; }
table { border-collapse: collapse; width: 100%; margin-bottom: 20px; }
th, td { border: 1px solid #ccc; padding: 6px; text-align: left; }
th { background-color: #f2f2f2; }
h2, h3 { color: #003366; }
</style>
</head>
<body>
$html
</body>
</html>
"@
#mail
$smtpServer = $env:COMPUTERNAME
$from = "exchangesearchindex@test.local"
$to = "exchangesearchindex@test.local"
$subject = "<ExchangeSunucu> Search Service Health Report - $reportTime"
Send-MailMessage -From $from -To $to -Subject $subject -SmtpServer $smtpServer -BodyAsHtml -Body $fullHtml
Write-Host "Sağlik raporu e-posta olarak gönderildi." -ForegroundColor Green

İlgili Script kaydedilir.







