Görkem

WFN Üye
Konular
1,788
Mesajlar
1,824
Çözüm
1
Ticaret Puanı
0
Üyelik
1 Yıl 7 Ay 9 Gün
Konum
Adıyaman
Web Sitesi
Yok
Alanı
Reklam Al-Sat
1/1
Konu sahibi
İlk olarak Get-WinEvent cmdlet’ini kullanın. Bu cmdlet ile yerel Windows sunucusundaki günlükleri listeleyebilir, System, Application veya Security gibi belirli bir günlükten olayları çekebilir, hata ve uyarıları filtreleyip CSV dosyasına kaydedebilirsiniz. Uzak bir sunucuyu sorgulayacaksanız sunucu adını ve gerekli yetkileri komuta eklemeniz gerekir.

Günlük adlarını listeleme​


PowerShell’i mümkünse Yönetici olarak açın. Özellikle güvenlik günlüğü gibi korunan günlüklerde yönetici yetkisi olmadan erişim hatası alabilirsiniz. Önce sunucuda bulunan günlükleri ve kayıt sayılarını görün:

Kod:
Get-WinEvent -ListLog * |
    Where-Object { $null -ne $_.RecordCount } |
    Select-Object LogName, RecordCount, IsEnabled, LogMode

Çıktıdaki LogName değeri, sonraki komutlarda kullanılacak gerçek günlük adıdır. RecordCount değeri sıfırsa veya boşsa bu durum günlükte okunabilir bir kayıt bulunmadığını gösterir; sunucuda hiçbir olay yaşanmadığını kanıtlamaz. Günlük devre dışı olabilir, kayıtlar temizlenmiş olabilir veya olaylar başka bir günlükte tutuluyor olabilir.

Son olayları görüntüleme​


Örneğin Sistem günlüğündeki en yeni 20 olayı görmek için şu komutu çalıştırın:

Kod:
Get-WinEvent -LogName System -MaxEvents 20 |
    Select-Object TimeCreated, Id, LevelDisplayName, ProviderName, Message

Sonuçtaki alanlar şu şekilde yorumlanır: TimeCreated olayın zamanını, Id olay kimliğini, LevelDisplayName önem seviyesini, ProviderName olayı üreten bileşeni, Message ise olayın açıklamasını gösterir. Bir olayın Error veya Critical seviyesinde olması incelenmesi gerektiğini gösterir; tek başına sunucunun arızalı olduğunu veya olayın kök neden olduğunu kanıtlamaz. Aynı zaman aralığındaki hizmet, disk, ağ ve uygulama olaylarıyla birlikte değerlendirin.

Hata ve uyarıları filtreleme​


Belirli bir günlükte yalnızca hata ve kritik olayları almak için FilterHashtable kullanabilirsiniz:

Kod:
Get-WinEvent -FilterHashtable @{
    LogName   = 'System'
    Level     = 1, 2
    StartTime = (Get-Date).AddHours(-24)
} |
    Select-Object TimeCreated, Id, LevelDisplayName, ProviderName, Message

Bu örnek son 24 saatteki Sistem günlüğünde Level değeri 1 veya 2 olan olayları getirir. Windows olay seviyelerinde 1 kritik, 2 hata anlamına gelir. Sonuç yoksa son 24 saatte bu seviyelerde olay bulunmadığı anlaşılır; bu, tüm servislerin sağlıklı olduğunu kesin olarak göstermez. Uygulama sorununu araştırıyorsanız aynı sorguyu Application günlüğünde de çalıştırın.

Belirli bir olay kimliğini incelemek için kimliği filtreye ekleyin:

Kod:
Get-WinEvent -FilterHashtable @{
    LogName = 'System'
    Id      = 7036
    StartTime = (Get-Date).AddDays(-1)
} | Select-Object TimeCreated, Id, ProviderName, Message

Olay kimliği tek başına yeterli değildir. Aynı kimlik farklı sağlayıcılarda veya farklı işletim sistemi sürümlerinde farklı açıklamalarla görülebilir. Bu nedenle ProviderName, olay zamanı ve tam Message bilgisini birlikte saklayın.

Uzak Windows sunucusunun günlüklerini görüntüleme​


Aynı ağdaki ve uzaktan olay günlüğü sorgulamasına izin veren bir sunucuyu -ComputerName ile sorgulayabilirsiniz:

Kod:
Get-WinEvent -ComputerName 'SRV01' -LogName System -MaxEvents 50 |
    Select-Object TimeCreated, Id, LevelDisplayName, ProviderName, Message

Yetki gerekiyorsa kimlik bilgilerini güvenli biçimde isteyerek kullanın:

Kod:
$Credential = Get-Credential

Get-WinEvent -ComputerName 'SRV01' -Credential $Credential -LogName Application -MaxEvents 50 |
    Select-Object TimeCreated, Id, LevelDisplayName, ProviderName, Message

Komut erişim, RPC veya günlük okuma hatası verirse önce sunucu adının çözümlendiğini, hedef sunucunun erişilebilir olduğunu ve kullandığınız hesabın ilgili günlükleri okuyabildiğini kontrol edin. Parolayı komut satırına düz metin olarak yazmayın. Uzak sorgu yapılandırması engelliyse, sunucuda komutu yerel olarak çalıştırmak veya kurumun izin verdiği PowerShell uzaktan yönetim yöntemini kullanmak gerekir.

Çıktıyı dosyaya kaydetme​


Olayları daha sonra paylaşmak veya karşılaştırmak için nesneleri CSV dosyasına aktarın. Özellikle Message alanı uzun olabileceği için önce gerekli alanları seçin:

Kod:
$Events = Get-WinEvent -FilterHashtable @{
    LogName   = 'System'
    Level     = 1, 2
    StartTime = (Get-Date).AddHours(-24)
} | Select-Object TimeCreated, Id, LevelDisplayName, ProviderName, Message

$Events | Export-Csv -Path 'C:\Temp\System-errors-last-24h.csv' -NoTypeInformation -Encoding UTF8

Dosyanın oluştuğunu ve kayıt sayısını kontrol edin:

Kod:
Test-Path 'C:\Temp\System-errors-last-24h.csv'
$Events.Count

İlk komut True döndürürse dosya oluşturulmuştur. Kayıt sayısı sıfırsa CSV’nin boş olması beklenir; filtreyi genişletmeden önce doğru günlük adını, tarih aralığını ve seviyeyi kontrol edin. Dışarıya göndermeden önce kullanıcı adları, bilgisayar adları, dosya yolları ve hata iletilerindeki hassas bilgileri inceleyin.

Eski Windows PowerShell sürümünde alternatif​


Windows PowerShell 5.1’de klasik Application, System ve Security günlüklerini Get-EventLog ile de okuyabilirsiniz:

Kod:
Get-EventLog -LogName System -Newest 20 |
    Select-Object TimeGenerated, EventID, EntryType, Source, Message

Ancak yeni Windows olay günlüğü teknolojisi ve ayrıntılı filtreleme için tercih edilmesi gereken cmdlet Get-WinEvent’tir. Get-Event ise Windows Olay Görüntüleyicisi günlüklerini okumaz; yalnızca geçerli PowerShell oturumunun olay kuyruğuyla ilgilidir.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic