PowerShell

PowerShell Auditing: GPO ile Script Block Logging ve Transcription

Saha notu / teknik rehber Son kontrol 18 Eylül 2026 Konu merkezine dön →
Tolga CEYHAN Sistem Yönetimi & IT

PowerShell yalnızca otomasyon aracı değildir; doğru yapılandırıldığında yönetici ve script aktivitelerinin izlenmesinde önemli bir kayıt kaynağıdır. Kurumsal Windows ortamlarında Transcription, Script Block Logging ve Module Logging birlikte değerlendirilerek hem operasyonel troubleshooting hem de güvenlik incelemeleri için daha anlamlı kayıtlar üretilebilir.

Amaç ve Kapsam

Bu rehberde Windows PowerShell 5.1 ağırlıklı kurumsal Windows ortamlarında PowerShell auditing yapılandırmasını ele alıyoruz. Amaç yalnızca TXT dosyası oluşturmak değil; hangi kayıt mekanizmasının neyi topladığını, GPO ile nasıl merkezi uygulanacağını, Event Viewer üzerinden nasıl doğrulanacağını ve logların nasıl korunacağını açıklamaktır.

Ön Koşullar

  • Windows PowerShell 5.1 veya desteklenen PowerShell sürümü.
  • Domain ortamında ilgili bilgisayarlara GPO uygulayabilecek yetki.
  • Merkezi transcript klasörü kullanılacaksa kontrollü SMB paylaşımı ve uygun NTFS/share izinleri.
  • Logların saklama süresi, erişim modeli ve SIEM/merkezi log toplama yaklaşımının önceden belirlenmesi.

PowerShell Auditing Bileşenleri

1. PowerShell Transcription

Transcription, PowerShell oturumundaki giriş ve konsol çıktısını metin tabanlı transcript dosyalarına kaydeder. Kullanıcının çalıştırdığı komutları ve ekranda oluşan çıktıyı operasyonel olarak incelemek için kullanışlıdır.

2. Script Block Logging

Script Block Logging; komutların, script block’ların, fonksiyonların ve scriptlerin PowerShell tarafından işlenmesini kaydeder. Windows PowerShell 5.1’de kayıtlar Microsoft-Windows-PowerShell/Operational kanalında tutulur ve özellikle Event ID 4104 güvenlik incelemelerinde önemlidir.

3. Module Logging

Module Logging, belirlenen PowerShell modüllerinin pipeline execution ayrıntılarını kaydetmek için kullanılır. Tüm modülleri izlemek mümkün olsa da yüksek hacimli ortamlarda gereksiz log üretimini önlemek için kapsamın ihtiyaca göre belirlenmesi daha sağlıklıdır.

GPO ile PowerShell Transcription Etkinleştirme

Windows PowerShell 5.1 için Group Policy Management Editor üzerinde aşağıdaki yolu kullanabilirsiniz:

Computer Configuration
  → Administrative Templates
    → Windows Components
      → Windows PowerShell
        → Turn on PowerShell Transcription

Policy’yi Enabled yaptıktan sonra ihtiyaç halinde Include invocation headers seçeneğini etkinleştirebilir ve bir Output Directory belirleyebilirsiniz.

Örnek yerel hedef:

C:\PSLogs

Kurumsal ortamda yerel klasör yerine erişimi sınırlandırılmış merkezi bir paylaşım tercih edilebilir. Ancak transcript dosyaları hassas komut ve çıktı içerebileceğinden, paylaşım izinleri sıradan dosya paylaşımı gibi tasarlanmamalıdır.

Script Block Logging Etkinleştirme

Aynı GPO ağacında:

Computer Configuration
  → Administrative Templates
    → Windows Components
      → Windows PowerShell
        → Turn on PowerShell Script Block Logging

Policy etkinleştirildikten sonra yeni PowerShell oturumlarında işlenen script block’lar Operational log’a yazılır.

Windows PowerShell 5.1 kayıtlarını görüntülemek için:

Event Viewer
  → Applications and Services Logs
    → Microsoft
      → Windows
        → PowerShell
          → Operational

Event ID 4104 kayıtlarını PowerShell ile sorgulamak için:

Get-WinEvent -FilterHashtable @{
    LogName = 'Microsoft-Windows-PowerShell/Operational'
    Id      = 4104
} -MaxEvents 20

Module Logging Etkinleştirme

GPO üzerinde Turn on Module Logging policy’sini etkinleştirerek izlenecek modülleri tanımlayabilirsiniz. Test ortamında tüm modülleri görmek için * kullanılabilir; üretimde ise log hacmi ve izleme ihtiyacı birlikte değerlendirilmelidir.

Bir oturum içinde belirli bir modülün pipeline logging özelliğini kontrol etmek için:

Import-Module ActiveDirectory
(Get-Module ActiveDirectory).LogPipelineExecutionDetails = $true

GPO Uygulamasını Doğrulama

İstemci veya sunucu üzerinde policy’nin geldiğini doğrulamak için:

gpupdate /force
gpresult /h C:\Temp\PowerShell-GPO.html

Ardından yeni bir PowerShell oturumu açın, birkaç test komutu çalıştırın ve hem transcript hedefini hem de Operational log’u kontrol edin.

Transcript Dosyalarını Kontrol Etme

Yerel test hedefi C:\PSLogs ise:

Get-ChildItem -Path 'C:\PSLogs' -File -Recurse |
    Sort-Object LastWriteTime -Descending |
    Select-Object -First 10 FullName, LastWriteTime, Length

Bir transcript’in içeriğini incelemek için dosya yolunu doğruladıktan sonra Get-Content kullanabilirsiniz.

PowerShell 7 Kullanıyorsanız

PowerShell 7 ile Windows PowerShell 5.1’in logging yollarını birebir aynı kabul etmeyin. PowerShell 7 kendi PowerShell Core Group Policy ayarlarını ve yapılandırma seçeneklerini destekler. Windows üzerinde PowerShell Core event provider kayıtları PowerShellCore/Operational kanalında görülebilir. Aynı bilgisayarda 5.1 ve 7 birlikte kullanılıyorsa iki ortamın logging yapılandırmasını ayrı ayrı doğrulamak gerekir.

Güvenlik Açısından Kritik Nokta: Loglar da Hassas Veridir

Script Block Logging ve transcription kapsamı genişledikçe logların parola, token, connection string veya başka hassas değerler içerme ihtimali artar. Bu nedenle “daha fazla log her zaman daha güvenlidir” yaklaşımı doğru değildir.

  • Transcript klasörüne normal kullanıcıların değiştirme/silme yetkisini sınırlandırın.
  • Merkezi log hedefini ayrı erişim politikalarıyla koruyun.
  • Scriptlerde düz metin parola ve secret kullanımından kaçının.
  • Event log kapasitesini ve retention politikasını izleyin.
  • Gerekli ortamlarda Protected Event Logging yaklaşımını değerlendirin.

Yaygın Hatalar ve Troubleshooting

Transcript dosyası oluşmuyor

Önce gpresult ile GPO’nun gerçekten uygulandığını doğrulayın. Output Directory bir ağ paylaşımıysa istemci bilgisayarın ve ilgili güvenlik bağlamının hedefe yazabildiğini kontrol edin.

Event ID 4104 görünmüyor

Script Block Logging policy’sinin etkin olduğunu doğrulayın ve policy uygulandıktan sonra yeni bir PowerShell oturumu başlatın. Windows PowerShell 5.1 ile PowerShell 7 log kanallarını karıştırmadığınızdan emin olun.

Log hacmi çok büyüyor

Script Block Invocation Logging ve geniş kapsamlı Module Logging ciddi miktarda kayıt üretebilir. İhtiyaç olmayan ayrıntılı seçenekleri varsayılan olarak tüm altyapıya yaymak yerine önce pilot OU üzerinde log hacmini ölçün.

Loglarda hassas bilgiler görülüyor

Öncelikle scriptlerin secret yönetimini düzeltin. Log erişimini kısıtlayın ve güvenlik gereksiniminiz uygunsa Protected Event Logging kullanın. Auditing sistemi yeni bir bilgi sızıntısı kaynağına dönüşmemelidir.

Kurumsal Uygulama Önerisi

PowerShell auditing’i tek bir policy olarak değil, katmanlı bir kayıt stratejisi olarak tasarlayın. Transcription kullanıcı oturumunun okunabilir kaydını sağlarken Script Block Logging güvenlik analizi için daha ayrıntılı içerik sunar; Module Logging ise seçilen modüllerin pipeline faaliyetlerini tamamlayıcı olarak izler.

Önce test OU’sunda etkinleştirip log hacmini ve uygulama davranışını gözlemlemek, ardından sunucu ve yönetici workstation’larına kontrollü biçimde yaymak daha güvenli bir yöntemdir. Yüksek değerli sistemlerin loglarını merkezi SIEM veya log toplama altyapısına aktarmak ayrıca değerlendirilmelidir.

Sonuç

PowerShell auditing için yalnızca transcript dosyası oluşturmak yeterli değildir. GPO ile Transcription, Script Block Logging ve gerektiğinde Module Logging birlikte tasarlandığında hem troubleshooting hem de olay inceleme kabiliyeti belirgin şekilde güçlenir.

En önemli nokta, üretilen logların kendisinin de hassas veri olduğunun unutulmamasıdır. Doğru erişim modeli, saklama politikası ve merkezi toplama yaklaşımı olmadan logging kapsamını artırmak yeni riskler oluşturabilir.

İlgili Rehberler

  • PowerShell Komutları – Profesyonel Rehber
  • PowerShell Script Nedir ve Nasıl Yazılır?
  • PowerShell Event Log Analizi
  • PowerShell Secret Management
  • Windows Server Health Check ve Otomatik Raporlama

Yazar

Tolga CEYHAN

Sistem Yönetimi & IT

Tolga CEYHAN, bilgi teknolojilerini severek takip eder ve BT üzerine hali hazırda aktif olarak çalışmaktadır. 2006 yılından 2017 yılına kadar web tasarım yazılım üzerine çalışmalar yaptım. Şuan ise Windows Sistem ve Sistem Güvenliği alanında çalışmalarımı sürdürmekteyim.

PROFESYONEL PROFİL

Bu teknik içeriğin arkasındaki deneyimi inceleyin.

Microsoft altyapıları, Active Directory, SCCM, PowerShell, Windows Server ve VMware odaklı teknik profil ve proje çalışmaları.

Projeler & Vaka Çalışmalarıİngilizce Profil

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir