⚙️
PowerShell
Windows ortamlarında Invoke-RestMethod ile Alertalk sesli alarm entegrasyonu. Windows Event Log izleme, Task Scheduler, servis kontrolü ve disk izleme için hazır scriptler.
Tüm scriptler PowerShell 3.0+ ile çalışır. Windows Server 2012 R2 ve üzeri desteklenir. TLS 1.2 fix her scripte dahildir — Windows Server 2012/2016'da gereklidir.
Temel Fonksiyon
Tüm senaryolarda kullanılan temel fonksiyon. Kendi scriptlerinize kopyalayarak kullanabilirsiniz.
PowerShell — temel fonksiyon
# TLS 1.2 — Windows Server icin gerekli [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 function Send-AlertalkVoiceAlert { param( [string]$PhoneNumber, [string]$Message, [string]$WebhookKey = "YOUR_WEBHOOK_KEY" ) $headers = @{ "X-Webhook-Key" = $WebhookKey "Content-Type" = "application/json" } $body = @{ phone_number = $PhoneNumber error_message = $Message } | ConvertTo-Json try { $response = Invoke-RestMethod ` -Uri "https://tr.alertalk.net/webhook/receive" ` -Method Post ` -Headers $headers ` -Body ([System.Text.Encoding]::UTF8.GetBytes($body)) return $response } catch { Write-Warning "Alertalk hata: $($_.Exception.Message)" } } # Kullanim ornegi Send-AlertalkVoiceAlert ` -PhoneNumber "5XXXXXXXXX" ` -Message "Test alarmi: PowerShell entegrasyonu basarili"
Gerçek Senaryolar
Windows Event Log İzleme
Belirli Event ID'ler oluştuğunda otomatik sesli alarm
PowerShell — başarısız giriş alarmı (Event ID 4625)
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $WebhookKey = "YOUR_WEBHOOK_KEY" $PhoneNumber = "5XXXXXXXXX" $Hostname = $env:COMPUTERNAME # Son 5 dakikadaki basarisiz giris denemelerini al $Since = (Get-Date).AddMinutes(-5) $Events = Get-WinEvent -FilterHashtable @{ LogName = 'Security' Id = 4625 # Failed logon StartTime = $Since } -ErrorAction SilentlyContinue if ($Events -and $Events.Count -gt 0) { $Count = $Events.Count $Message = "$Hostname - Son 5 dakikada $Count basarisiz giris denemesi tespit edildi" $headers = @{ "X-Webhook-Key" = $WebhookKey; "Content-Type" = "application/json" } $body = @{ phone_number = $PhoneNumber; error_message = $Message } | ConvertTo-Json Invoke-RestMethod ` -Uri "https://tr.alertalk.net/webhook/receive" ` -Method Post ` -Headers $headers ` -Body ([System.Text.Encoding]::UTF8.GetBytes($body)) }
PowerShell — sistem kapatma / yeniden başlatma (Event ID 1074, 6006)
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $WebhookKey = "YOUR_WEBHOOK_KEY" $PhoneNumber = "5XXXXXXXXX" $Hostname = $env:COMPUTERNAME $Events = Get-WinEvent -FilterHashtable @{ LogName = 'System' Id = 1074, 6006 # Shutdown / Restart StartTime = (Get-Date).AddMinutes(-2) } -ErrorAction SilentlyContinue if ($Events) { $Event = $Events[0] $Type = if ($Event.Id -eq 1074) { "kapatma/yeniden baslatma" } else { "beklenmedik kapanma" } $Message = "$Hostname sunucusunda $Type islemi tespit edildi" $headers = @{ "X-Webhook-Key" = $WebhookKey; "Content-Type" = "application/json" } $body = @{ phone_number = $PhoneNumber; error_message = $Message } | ConvertTo-Json Invoke-RestMethod ` -Uri "https://tr.alertalk.net/webhook/receive" ` -Method Post ` -Headers $headers ` -Body ([System.Text.Encoding]::UTF8.GetBytes($body)) }
PowerShell — servis crash alarmı (Event ID 7034)
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $WebhookKey = "YOUR_WEBHOOK_KEY" $PhoneNumber = "5XXXXXXXXX" $Hostname = $env:COMPUTERNAME $Events = Get-WinEvent -FilterHashtable @{ LogName = 'System' Id = 7034 # Service crashed unexpectedly StartTime = (Get-Date).AddMinutes(-5) } -ErrorAction SilentlyContinue if ($Events) { foreach ($Event in $Events) { $ServiceName = $Event.Properties[0].Value $Message = "$Hostname - $ServiceName servisi beklenmedik sekilde durdu" $headers = @{ "X-Webhook-Key" = $WebhookKey; "Content-Type" = "application/json" } $body = @{ phone_number = $PhoneNumber; error_message = $Message } | ConvertTo-Json Invoke-RestMethod ` -Uri "https://tr.alertalk.net/webhook/receive" ` -Method Post ` -Headers $headers ` -Body ([System.Text.Encoding]::UTF8.GetBytes($body)) } }
Bu scriptleri Task Scheduler ile her 5 dakikada bir çalıştırın. Aşağıda Task Scheduler kurulumu anlatılmıştır.
Task Scheduler — Başarısız Görev Alarmı
Zamanlanmış görev başarısız olunca sesli alarm
PowerShell — başarısız task kontrolü
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $WebhookKey = "YOUR_WEBHOOK_KEY" $PhoneNumber = "5XXXXXXXXX" $Hostname = $env:COMPUTERNAME # Son 1 saatteki basarisiz task'lari bul $FailedTasks = Get-ScheduledTask | Where-Object { $_.State -ne 'Disabled' } | ForEach-Object { $info = $_ | Get-ScheduledTaskInfo if ($info.LastTaskResult -ne 0 -and $info.LastRunTime -gt (Get-Date).AddHours(-1)) { [PSCustomObject]@{ Name = $_.TaskName LastResult = $info.LastTaskResult LastRun = $info.LastRunTime } } } if ($FailedTasks) { foreach ($task in $FailedTasks) { $Message = "$Hostname - Task basarisiz: $($task.Name) (Hata kodu: $($task.LastResult))" $headers = @{ "X-Webhook-Key" = $WebhookKey; "Content-Type" = "application/json" } $body = @{ phone_number = $PhoneNumber; error_message = $Message } | ConvertTo-Json Invoke-RestMethod ` -Uri "https://tr.alertalk.net/webhook/receive" ` -Method Post ` -Headers $headers ` -Body ([System.Text.Encoding]::UTF8.GetBytes($body)) } }
Windows Servis İzleme
Kritik servisler durduğunda sesli alarm ve otomatik yeniden başlatma
PowerShell — servis kontrol ve otomatik yeniden başlatma
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $WebhookKey = "YOUR_WEBHOOK_KEY" $PhoneNumber = "5XXXXXXXXX" $Hostname = $env:COMPUTERNAME # İzlenecek servisler $CriticalServices = @( "W3SVC", # IIS "MSSQLSERVER", # SQL Server "WinRM" # Windows Remote Management ) foreach ($ServiceName in $CriticalServices) { $Service = Get-Service -Name $ServiceName -ErrorAction SilentlyContinue if ($Service -and $Service.Status -ne 'Running') { # Otomatik yeniden baslatmayı dene try { Start-Service -Name $ServiceName -ErrorAction Stop $Message = "$Hostname - $ServiceName servisi durduydu, yeniden baslatildi" } catch { $Message = "$Hostname - $ServiceName servisi durdu ve baslatılamadı! Mudahale gerekiyor" } $headers = @{ "X-Webhook-Key" = $WebhookKey; "Content-Type" = "application/json" } $body = @{ phone_number = $PhoneNumber; error_message = $Message } | ConvertTo-Json Invoke-RestMethod ` -Uri "https://tr.alertalk.net/webhook/receive" ` -Method Post ` -Headers $headers ` -Body ([System.Text.Encoding]::UTF8.GetBytes($body)) } }
Disk Doluluk İzleme
Disk belirli eşiği aşınca sesli alarm
PowerShell — tüm diskleri kontrol et
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $WebhookKey = "YOUR_WEBHOOK_KEY" $PhoneNumber = "5XXXXXXXXX" $Hostname = $env:COMPUTERNAME $Threshold = 85 # % doluluk eşiği Get-PSDrive -PSProvider FileSystem | Where-Object { $_.Used -gt 0 } | ForEach-Object { $UsedPct = [math]::Round(($_.Used / ($_.Used + $_.Free)) * 100, 1) $FreeGB = [math]::Round($_.Free / 1GB, 1) if ($UsedPct -ge $Threshold) { $Message = "$Hostname - $($_.Name): disk dolulugu %$UsedPct, kalan: ${FreeGB}GB" $headers = @{ "X-Webhook-Key" = $WebhookKey; "Content-Type" = "application/json" } $body = @{ phone_number = $PhoneNumber; error_message = $Message } | ConvertTo-Json Invoke-RestMethod ` -Uri "https://tr.alertalk.net/webhook/receive" ` -Method Post ` -Headers $headers ` -Body ([System.Text.Encoding]::UTF8.GetBytes($body)) } }
Task Scheduler ile Otomatik Çalıştır
Scriptleri PowerShell ile Task Scheduler'a kaydet
PowerShell — Task Scheduler'a kayıt (her 5 dakika)
# Scripti kaydet — Admin yetkisi gerekli $Action = New-ScheduledTaskAction ` -Execute "powershell.exe" ` -Argument "-NonInteractive -ExecutionPolicy Bypass -File C:\Scripts\alertalk_eventlog.ps1" $Trigger = New-ScheduledTaskTrigger ` -RepetitionInterval (New-TimeSpan -Minutes 5) ` -Once ` -At (Get-Date) $Settings = New-ScheduledTaskSettingsSet ` -ExecutionTimeLimit (New-TimeSpan -Minutes 2) ` -MultipleInstances IgnoreNew Register-ScheduledTask ` -TaskName "Alertalk-EventLog-Monitor" ` -Action $Action ` -Trigger $Trigger ` -Settings $Settings ` -RunLevel Highest ` -Force
Not: Script dosyasını önce
C:\Scripts\ klasörüne kaydedin. Task'ı çalıştırmak için Administrator yetkisi gerekir.
Windows Event ID Referansı
Alertalk ile izlemek için önerilen kritik Event ID'ler:
| Event ID | Açıklama | Log | Önem |
|---|---|---|---|
| 4625 | Başarısız oturum açma | Security | 🔴 Kritik |
| 4648 | Açık kimlik bilgileriyle oturum açma | Security | 🔴 Kritik |
| 4720 | Yeni kullanıcı hesabı oluşturuldu | Security | 🟡 Uyarı |
| 4740 | Kullanıcı hesabı kilitlendi | Security | 🟡 Uyarı |
| 1074 | Sistem kapatma / yeniden başlatma | System | 🟡 Uyarı |
| 6006 | Beklenmedik sistem kapanması | System | 🔴 Kritik |
| 7034 | Servis beklenmedik şekilde durdu | System | 🔴 Kritik |
| 7045 | Yeni servis kuruldu | System | 🟡 Uyarı |
| 1102 | Güvenlik audit logu temizlendi | Security | 🔴 Kritik |
| 4698 | Yeni zamanlanmış görev oluşturuldu | Security | 🟡 Uyarı |