Get-EventLog kullanarak Windows olay günlüklerini bulma

Okuma süresi - 5 dk.

Get-EventLog

Windows işletim sistemi, event logs’a (bu yazıda olay günlükleri olarak adlandırılacak) girdiler yazarak çeşitli sistem olaylarının kaydını oluşturmak için tasarlanmıştır. Yöneticiler normalde olay günlüklerine Windows Event Viewer aracılığıyla erişir. Ancak, günlük verilerini Windows PowerShell aracılığıyla görüntülemek de mümkündür.

Windows işletim sistemi hatalar ve diğer olay türlerini günlük dosyaları koleksiyonuna yazar. Birçok uygulama, Windows olay günlüklerine veri yazmak için tasarlanmıştır. Windows, her biri özel bir amaca sahip olan çeşitli loglar sağlar. Core Windows logs şunları içermektedir:

Application: Başlangıçta, Windows uygulamaları Application log’a uygulama ile ilgili log verilerini yazmak için tasarlanmıştır. Bugün, bu log geriye dönük uyumluluk amacıyla da kullanılmaktadır. Uygulamaya özgü log verilerinin çoğu artık her uygulama için ayrı logların oluşturulmasını sağlayan Applications and Services log‘a yazılmaktadır.

Security: Security log, güvenlikle ilgili olayları depolar.

Setup: Setup log işletim sistemi ve patch installation hakkında bilgi sağlar.

System: System log, işletim sisteminin sağlığı ve işlevselliği ile ilgili olayları içerir.

Forwarded Events: Forwarded Events log, uzak bilgisayarda gerçekleşen olaylar için bir repository görevi görür.

Event Viewer

Daha önce belirtildiği gibi, Event Viewer, birçok third-party tools’u kullanılabilmesine rağmen, Windows olay günlüklerine erişmek için kullanılan yerel grafik aracıdır. Event Viewer üç ana bölüme ayrılmıştır. Soldaki bölmede tek tek olay günlükleri listelenir ve görüntülemek istediğiniz olayı seçmenizi sağlar. Bir log seçiliyken, ekranın sağ üst kısmındaki bölmede bu loglara ait olaylar listelenir. Bu olaylar kronolojik sırada listelenir, ancak önem derecesi (level), source, event ID veya category’e göre sıralanabilir.

Pencerenin sağ alt bölümündeki bölmede, seçili olan günlük girişinin ayrıntıları görüntülenir. Her olay için, Windows günlük adını, kaynağı, olay kimliğini, düzeyi, kullanıcıyı, OpCode’u, olayın günlüğe kaydedildiği tarih ve saati, görev kategorisini, anahtar kelimeyi ve kullanıcıyı görüntüler.

Get-WinEvent ve Get-EventLog karşılaştırması

PowerShell, Windows olay günlüklerine erişmek için iki ana cmdlet sağlar. Bu cmdlet’ler Get-WinEvent ve Get-EventLog‘dur. Her iki cmdlet de local bilgisayardan ve uzak bilgisayarlardan olay günlüğü girdilerini alabilir. İki cmdlet arasındaki en önemli fark, Get-WinEvent cmdlet’inin ilk olarak Windows Vista’da tanıtılan klasik olay günlükleriyle çalışması, Get-EventLog cmdlet’inin çalışmamasıdır.

Get-WinEvents cmdlet’i list providers kavramını kullanır. List providers, belirli bir olay günlüğüne günlük verileri yazmak için yapılandırılmış bir bileşendir. Örneğin, Trusted Platform Module ile ilgili günlük verileri, TPM ile ilgili günlük verilerini System log’a gönderen TPM list provider tarafından işlenir.

Aşağıdaki komutları girerek list provider’leri görüntüleyebilirsiniz:

Get-WinEvents -ListProvider *

Yıldız işareti, tüm list provider’lerin gösterilmesi gerektiğini belirten bir işlev görür. Bununla birlikte, düzinelerce list provider vardır. Bu nedenle bir list provider’in adını (bu durumda TPM) belirtmek genellikle daha pratiktir. Örneğin T*, T harfiyle başlayan liste sağlayıcılarını listeler. TPM list provider ile ilgili olayları görmek için şu komutu kullanın:

(Get-WinEvent -ListProvider TPM).Events

Get-WinEvent cmdlet’ini kullanarak günlük verilerini klasik bir günlükten almak için kullanılır. Günlük dosyasının adını Get-EventLog cmdlet’ine eklemeniz yeterlidir. Örneğin, sistem olaylarını System log’da görmek istiyorsanız, bunu şu komutla yapabilirsiniz:

Get-EventLog -LogName System

Uzak bilgisayarlarda logları kontrol etme

Logları local bilgisayar yerine uzak bir bilgisayardan almanız gerekiyorsa, ComputerName parametresini komutunuza eklemeniz gerekir. Örneğin, System günlüklerinin içeriğini Server1 adlı uzak bir bilgisayardan almak istiyorsanız, bu komutu kullanabilirsiniz:

Get-EventLog -LogName System -ComputerName Server1

Benzer şekilde, Get-WinEvent cmdlet’ini, şu komutu kullanarak Server1 adlı uzak bir bilgisayardan TPM ile ilişkili logları almak için kullanabilirsiniz:

(Get-WinEvent -ListProvider TPM -ComputerName Server1).Events

Her iki komutun da uzak bilgisayar için DNS ad çözümlemesi yapabildiğini ve uzak bilgisayarın olay günlüklerine erişme izninizin olması gerektiğini unutmayın.

Birden çok bilgisayarda sorun bulma

PowerShell, logları birden çok bilgisayardan alabilmenize imkan tanır. Aslında, işlem, uzaktaki bir bilgisayardan logları alma işlemiyle neredeyse aynıdır. Get-EventLog cmdlet’ini kullanıyorsanız, LogName parametresini ve ComputerName parametresini eklemeniz gerekir. Örneğin, System loglarını Server1, Server2 ve Server3’ten almak istiyorsanız şu komutu kullanın:

Get-EventLog -LogName System -ComputerName Server1, Server2, Server3

Get-WinEvent cmdlet’i -ComputerName parametresini de kullanır. Server1, Server2 ve Server3’ten TPM ile ilgili günlük girdilerini almak istiyorsanız, bu komutu kullanabilirsiniz:

(Get-WinEvent -ListProvider TPM -ComputerName Server1, Server2, Server3).Events

Örnek komutlar

Get-EventLog cmdlet’ini veya Get-WinEvent cmdlet’ini kullanarak logları alıp almadığınıza bakılmaksızın,log dosyalarında muhtemelen bakmak için çok fazla veri bulunur. Yalnızca en alakalı olayların gösterilmesi için olay günlüğü verilerini filtrelemek üzere PowerShell’i kullanabilirsiniz.

Logları bir zaman aralığına, olay kimlikleri gibi value veya Active Directory veya hatta Grup İlkesi gibi belirli bir kelimeye göre filtreleyebilirsiniz. Logları filtrelemenin birçok farklı yolu vardır. Ancak en yaygın yöntem, logları almak için Get-EventLog veya Get-WinEvent cmdlet’ini kullanmayı ve ardından bu verileri Where-Object cmdlet’i için pipeline input girdisi olarak ele almayı içerir.