Dil / Lang:
← Ana Sayfa Entegrasyon Kılavuzları Kullanım Kılavuzu Blog Ücretsiz Başla →
🔵 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ı

Diğer Entegrasyonlar