# önder online
Teknoloji ve siber güvenlik dünyasına hoş geldiniz Güncel siber tehditler ve korunma yöntemleri Yapay zekâ ve otomasyonun güvenliğe etkileri Microsoft 365 ve Active Directory güvenlik rehberleri Yazılım geliştirmede güvenlik odaklı yaklaşımlar Teknoloji ve siber güvenlik dünyasına hoş geldiniz Güncel siber tehditler ve korunma yöntemleri

Menu

Windows Server 2019'da oturum açma/kapama olaylarını alma

Windows Server 2019'da oturum açma/kapama olaylarını alma

Windows Server 2019'da oturum açma/kapama olaylarını alma

Script ne yapar:

  • ✅ Başarılı/başarısız girişleri gösterir
  • ✅ Oturum kapatma olaylarını izler
  • ✅ RDP, konsol, network girişlerini ayırt eder
  • ✅ Kaynak IP adreslerini gösterir
  • ✅ Özet istatistikler sunar
  • ✅ CSV'ye aktarma seçeneği

Kullanım örnekleri:

Temel kullanım (son 30 gün)
.\script.ps1

Son 7 günü göster
.\script.ps1 -GunSayisi 7

Belirli bir kullanıcı için
.\script.ps1 -KullaniciAdi "john.doe"

Son 90 gün, belirli kullanıcı
.\script.ps1 -GunSayisi 90 -KullaniciAdi "admin"

Önemli notlar:

  • PowerShell'i yönetici olarak çalıştırmalısınız
  • Security event log'larına erişim gereklidir
  • Sistem hesapları (SYSTEM, NETWORK SERVICE vb.) otomatik filtrelenir

Script, tüm oturum aktivitelerini detaylı şekilde gösterecek ve isteğe bağlı olarak CSV formatında kaydedebilecektir.

param(
    [int]$GunSayisi = 365,
    [string]$KullaniciAdi = "*"
)

Write-Host "========================================" -ForegroundColor Cyan
Write-Host "Windows Server Oturum Aktivite Raporu" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
Write-Host ""

$BaslangicTarihi = (Get-Date).AddDays(-$GunSayisi)

Write-Host "Tarih Aralığı: $($BaslangicTarihi.ToString('dd.MM.yyyy HH:mm')) - $(Get-Date -Format 'dd.MM.yyyy HH:mm')" -ForegroundColor Yellow
Write-Host "Loglar taranıyor, lütfen bekleyin..." -ForegroundColor Yellow
Write-Host ""

# Event ID'ler:
# 4624 - Başarılı oturum açma
# 4625 - Başarısız oturum açma
# 4634 - Oturum kapatma
# 4647 - Kullanıcı tarafından oturum kapatma
# 4648 - Farklı kimlik bilgileriyle oturum açma

$EventIDs = @(4624, 4625, 4634, 4647, 4648)

try {
    $Olaylar = Get-WinEvent -FilterHashtable @{
        LogName = 'Security'
        ID = $EventIDs
        StartTime = $BaslangicTarihi
    } -ErrorAction SilentlyContinue | ForEach-Object {
        $Olay = $_
        $KullaniciAdiBilgi = ""
        $OturumTipi = ""
        $Durum = ""
        
        switch ($Olay.Id) {
            4624 { 
                $Durum = "Başarılı Giriş"
                $KullaniciAdiBilgi = $Olay.Properties[5].Value
                $OturumTipi = switch ($Olay.Properties[8].Value) {
                    2 { "Interaktif (Konsol)" }
                    3 { "Network" }
                    4 { "Batch" }
                    5 { "Service" }
                    7 { "Unlock" }
                    8 { "NetworkCleartext" }
                    9 { "NewCredentials" }
                    10 { "RemoteInteractive (RDP)" }
                    11 { "CachedInteractive" }
                    default { "Diğer ($($Olay.Properties[8].Value))" }
                }
            }
            4625 { 
                $Durum = "Başarısız Giriş"
                $KullaniciAdiBilgi = $Olay.Properties[5].Value
                $OturumTipi = "Başarısız Deneme"
            }
            4634 { 
                $Durum = "Oturum Kapatma"
                $KullaniciAdiBilgi = $Olay.Properties[1].Value
                $OturumTipi = "Logoff"
            }
            4647 { 
                $Durum = "Kullanıcı Çıkışı"
                $KullaniciAdiBilgi = $Olay.Properties[1].Value
                $OturumTipi = "User Initiated"
            }
            4648 { 
                $Durum = "Farklı Kimlik ile Giriş"
                $KullaniciAdiBilgi = $Olay.Properties[5].Value
                $OturumTipi = "Explicit Credentials"
            }
        }
        
        if ($KullaniciAdi -ne "*" -and $KullaniciAdiBilgi -notlike "*$KullaniciAdi*") {
            return
        }
        
        if ($KullaniciAdiBilgi -match '^(SYSTEM|ANONYMOUS|LOCAL SERVICE|NETWORK SERVICE)$') {
            return
        }
        
        [PSCustomObject]@{
            Zaman = $Olay.TimeCreated
            EventID = $Olay.Id
            Durum = $Durum
            KullaniciAdi = $KullaniciAdiBilgi
            OturumTipi = $OturumTipi
            BilgisayarAdi = $Olay.MachineName
            KaynakIP = if ($Olay.Properties[18].Value) { $Olay.Properties[18].Value } else { "N/A" }
        }
    }
    

    if ($Olaylar) {
        $Olaylar = $Olaylar | Sort-Object Zaman -Descending
        
        Write-Host "Toplam Olay Sayısı: $($Olaylar.Count)" -ForegroundColor Green
        Write-Host ""
        
        $Olaylar | Format-Table -AutoSize @(
            @{Label="Tarih/Saat"; Expression={$_.Zaman.ToString("dd.MM.yyyy HH:mm:ss")}; Width=20}
            @{Label="Durum"; Expression={$_.Durum}; Width=25}
            @{Label="Kullanıcı"; Expression={$_.KullaniciAdi}; Width=20}
            @{Label="Oturum Tipi"; Expression={$_.OturumTipi}; Width=25}
            @{Label="Kaynak IP"; Expression={$_.KaynakIP}; Width=15}
        )
        
        Write-Host "`n========================================" -ForegroundColor Cyan
        Write-Host "ÖZET İSTATİSTİKLER" -ForegroundColor Cyan
        Write-Host "========================================" -ForegroundColor Cyan
        
        $Olaylar | Group-Object Durum | ForEach-Object {
            Write-Host "$($_.Name): $($_.Count)" -ForegroundColor Yellow
        }
        
        Write-Host "`nEn Aktif Kullanıcılar:" -ForegroundColor Cyan
        $Olaylar | Group-Object KullaniciAdi | Sort-Object Count -Descending | Select-Object -First 5 | ForEach-Object {
            Write-Host "  $($_.Name): $($_.Count) olay" -ForegroundColor White
        }
        
        Write-Host "`n" -NoNewline
        $Cevap = Read-Host "Sonuçları CSV dosyasına kaydetmek ister misiniz? (E/H)"
        if ($Cevap -eq 'E') {
            $DosyaYolu = "C:\LoginActivity_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv"
            $Olaylar | Export-Csv -Path $DosyaYolu -NoTypeInformation -Encoding UTF8
            Write-Host "Rapor kaydedildi: $DosyaYolu" -ForegroundColor Green
        }
        
    } else {
        Write-Host "Belirtilen kriterlere uygun olay bulunamadı." -ForegroundColor Red
    }
    
} catch {
    Write-Host "HATA: $($_.Exception.Message)" -ForegroundColor Red
    Write-Host "Not: Bu scripti yönetici olarak çalıştırmanız gerekebilir." -ForegroundColor Yellow
}

Write-Host "`nİşlem tamamlandı." -ForegroundColor Green