Merhaba,
Bu makalede, belirlediğim Windows servislerinin durumlarını her beş dakikada bir kontrol ederek, herhangi bir servis durduğunda Telegram üzerinden bildirim almayı nasıl sağlayabileceğinizi anlatacağım.
Bu makalede, örnek senaryo olarak Exchange servisleri üzerinden anlatım yapılacaktır.
Adım 1: Telegram Bot Oluşturma
Telegram’da @BotFather ile konuşma başlatın.
Görüldüğü üzere /newbot ile bir isim belirleyin.

Size verilen API Token değerini kaydedin. (Örn: 123456789:ABC-DEF1234ghIkl...
)
Botu kendi hesabınıza veya bir gruba ekleyin.

Chat ID öğrenmek için:
Telegram grubunu tarayıcıda açtığınızda, ekranda görünen ve – işareti ile başlayan Chat ID’yi not edin.

Aşağıda verilen PowerShell scriptinde yer alan Bot Token ve Chat ID alanlarını, kendi Telegram botunuzun bilgilerine göre düzenleyiniz.
# Telegram bot bilgileri
$token = "BOT_TOKENINI_YAZ"
$chatId = "CHAT_IDINI_YAZ"
# İzlenecek Exchange servisleri
$services = @(
"Microsoft Exchange Transport Log Search",
"Microsoft Exchange Transport",
"Microsoft Exchange Throttling",
"Microsoft Exchange Mailbox Transport Submission",
"Microsoft Exchange Service Host",
"Microsoft Exchange RPC Client Access",
"Microsoft Exchange Replication",
"Microsoft Exchange Emergency Mitigation Service",
"Microsoft Exchange Mailbox Replication",
"Microsoft Exchange Mailbox Assistants",
"Microsoft Exchange Information Store",
"Microsoft Exchange Health Manager Recovery",
"Microsoft Exchange Health Manager",
"Microsoft Exchange Frontend Transport",
"Microsoft Exchange Flighting Service",
"Microsoft Exchange Search",
"Microsoft Exchange EdgeSync",
"Microsoft Exchange Mailbox Transport Delivery",
"Microsoft Exchange DAG Management",
"Microsoft Exchange Compliance Service",
"Microsoft Exchange Anti-spam Update",
"Microsoft Exchange Active Directory Topology",
"Microsoft Exchange Compliance Audit"
)
foreach ($service in $services) {
try {
$s = Get-Service -DisplayName $service -ErrorAction Stop
if ($s.Status -ne "Running") {
$msg = "UYARI 🚨: '$service' servisi $(Get-Date) tarihinde $($s.Status) durumda!"
} else {
continue
}
}
catch {
$msg = "UYARI ⚠️: '$service' servisi bulunamadı! (Makine: $env:COMPUTERNAME)"
}
# Telegram bildirimi gönder
$url = "https://api.telegram.org/bot$token/sendMessage"
$body = @{ chat_id = $chatId; text = $msg }
Invoke-RestMethod -Uri $url -Method Post -Body $body
}
Test amacıyla Exchange servislerinin bulunmadığı bir makine üzerinde PowerShell scriptini çalıştırdım. Görüldüğü üzere script sorunsuz şekilde çalışmaktadır.

Şimdi, Telegram üzerinde gelen bildirimleri kontrol edelim.

Tüm konfigürasyon tamamlandı. Scripti C:\Scripts\ExchangeAllServicesCheck.ps1 dizini altında kaydettim. Kolaylık sağlaması için zamanlanmış görevi hazırladığım XML dosyası üzerinden oluşturacağım. Bu sayede PowerShell scripti her 5 dakikada bir belirlediğim servisleri kontrol edecek ve herhangi bir problem durumunda Telegram üzerinden bildirim gönderecektir.
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.3" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2025-09-25T20:00:00</Date>
<Author>Administrator</Author>
<Description>Exchange servislerini izler, durduğunda veya bulunamadığında Telegram bildirimi yollar.</Description>
</RegistrationInfo>
<Triggers>
<CalendarTrigger>
<Repetition>
<Interval>PT5M</Interval>
<StopAtDurationEnd>false</StopAtDurationEnd>
</Repetition>
<StartBoundary>2025-09-25T20:00:00</StartBoundary>
<Enabled>true</Enabled>
<ScheduleByDay>
<DaysInterval>1</DaysInterval>
</ScheduleByDay>
</CalendarTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>S-1-5-18</UserId>
<RunLevel>HighestAvailable</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>true</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>false</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT1H</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>powershell.exe</Command>
<Arguments>-ExecutionPolicy Bypass -File "C:\Scripts\ExchangeServiceCheck.ps1"</Arguments>
</Exec>
</Actions>
</Task>
Görev Zamanlayıcı üzerinden, aşağıda görüldüğü gibi hazırlanmış görevi içe aktarıyorum.

Artık bu zamanlanmış görev, her beş dakikada bir hazırlamış olduğumuz PowerShell scriptini çalıştıracaktır. Bir sorun oluştuğunda Telegram botu devreye girerek bildirim gönderecektir. Botun düzgün çalışabilmesi için, ilgili sunucunun api.telegram.org adresini DNS üzerinden çözebilmesi ve HTTPS (443) bağlantısı kurabilmesi gerekmektedir.