Aracılığıyla paylaş


Logging_Hakkında_Windows_Dışı

Kısa açıklama

PowerShell, motor, sağlayıcılar ve cmdlet'lerden iç işlemleri günlüğe kaydeder.

Uzun açıklama

PowerShell, motoru başlatma ve durdurma, sağlayıcıları başlatma ve durdurma gibi PowerShell işlemlerinin ayrıntılarını kaydeder. Ayrıca PowerShell komutları hakkındaki ayrıntıları günlüğe kaydeder.

Windows PowerShell 5.1'de günlüğe kaydetme hakkında bilgi için bkz. about_Logging.

PowerShell günlüklerinin konumu hedef platforma bağlıdır.

PowerShell, iki tür günlük kaydı yapılandırmayı destekler:

  • Modül günlüğü - Belirtilen modüllerin üyeleri için işlem hattı yürütme olaylarını kaydedin. Modül günlüğü hem oturum hem de belirli modüller için etkinleştirilmelidir. Bu günlüğü yapılandırma hakkında daha fazla bilgi için bakınız about_PowerShell_Config.

    Modül günlüğü yapılandırma aracılığıyla etkinleştirilirse, modülün LogPipelineExecutionDetails özelliğini ayarlayarak oturumdaki belirli modüller için günlüğe kaydetmeyi etkinleştirebilir ve devre dışı bırakabilirsiniz.

    Örneğin, PSReadLine modülü için modül günlüğünü etkinleştirmek için:

    $psrl = Get-Module PSReadLine
    $psrl.LogPipelineExecutionDetails = $true
    Get-Module PSReadLine | Select-Object Name, LogPipelineExecutionDetails
    
    Name       LogPipelineExecutionDetails
    ----       ---------------------------
    PSReadLine                        True
    
  • Betik bloğu günlüğü - Etkileşimli olarak veya otomasyon aracılığıyla çağrılsa da komutların, betik engellemelerinin, işlevlerin ve betiklerin işlenmesini kaydedin.

    Betik Bloğu Günlüğünü etkinleştirdiğinizde PowerShell, işlediği tüm betik bloklarının içeriğini kaydeder. Etkinleştirildikten sonra, tüm yeni PowerShell oturumları bu bilgileri günlüğe kaydeder.

    Not

    Tanılama dışında herhangi bir amaçla Betik Bloğu Günlüğü kullanılırken Korumalı Olay Günlüğünün etkinleştirilmesi önerilir. Daha fazla bilgi için bkz. about_PowerShell_Config.

Linux veya macOS'ta günlüğe kaydetmeyi yapılandırma

Linux ve macOS'ta günlüğe kaydetme yapılandırması powershell.config.json dosyasında depolanır. powershell.config.json dosyası, PowerShell dizininde bulunan $PSHOME biçimlendirilmiş bir dosyadır. Bu yapılandırma dosyası yoksa, varsayılan ayarları değiştirmek için oluşturmanız gerekir. PowerShell'in her yüklemesi bu dosyanın kendi kopyasını kullanır.

Varsayılan olarak, PowerShell Informational günlüğe kaydetmeyi Operational kanalında etkinleştirir. Ayrıntılı veya analitik günlük çıkışını etkinleştirme gibi ek günlük çıkışı gerekiyorsa yapılandırmayı değiştirebilirsiniz.

Aşağıdaki kod örnek bir yapılandırmadır:

{
    "ModuleLogging": {
        "EnableModuleLogging": false,
        "ModuleNames": [
            "PSReadLine",
            "PowerShellGet"
        ]
    },
    "ScriptBlockLogging": {
        "EnableScriptBlockInvocationLogging": true,
        "EnableScriptBlockLogging": true
    },
    "LogLevel": "verbose"
}

Aşağıda, PowerShell günlüğünü yapılandırmaya yönelik özelliklerin listesi yer alır. Özellik yapılandırmada listelenmiyorsa PowerShell varsayılan değeri kullanır.

  • logidentity
    • Değerler: <string name>, powershell
    • Açıklama: Günlüğe kaydetme sırasında kullanılacak ad. Varsayılan kimlik powershell. Bu değer, sürüm ve beta sürümü gibi bir PowerShell yüklemesinin iki örneği arasındaki farkı söylemek için kullanılabilir. Bu değer, günlük çıkışını ayrı bir dosyaya yeniden yönlendirmek için de kullanılır.
  • LogKanalları
    • Değerler: Operational, Analytic
    • Açıklama: Etkinleştirecek kanallar. Birden fazla değer belirtirken değerleri virgülle ayırın. Varsayılan değer Operational.
  • LogLevel
    • Değerler: Always, Critical, Error, Warning, Informational, Verbose, Debug
    • Açıklama: Tek bir değer belirtin. Değerler, ayrıntı derecesini artırarak listelenir. Seçtiğiniz değer kendisini ve ondan önceki tüm değerleri etkinleştirir. Varsayılan değer Informational.
  • LogKeywords
    • Değerler: Runspace, Pipeline, Protocol, Transport, Host, Cmdlets, Serializer, Session, ManagedPlugin
    • Açıklama: Anahtar sözcükler, kaydı PowerShell içindeki belirli bileşenlerle sınırlama olanağı sağlar. Varsayılan olarak, tüm anahtar sözcükler etkinleştirilir ve bu değeri değiştirmek yalnızca özel sorun giderme için kullanışlıdır.
  • PowerShellPolicies
    • Açıklama: PowerShellPolicies ayarı ModuleLogging, ProtectedEventLoggingve ScriptBlockLogging seçeneklerini içerir. Daha fazla bilgi için bkz. Ortak yapılandırma ayarları.

Linux'ta günlüğe alınan PowerShell günlük verilerini görüntüleme

PowerShell, Ubuntu ve Red Hat Enterprise Linux (RHEL) gibi Linux dağıtımlarında journald daemon'u kullanarak systemd günlük'e kaydeder.

journald arka plan programı, günlük mesajlarını ikili formatta depolar. PowerShell girdileri için günlük günlüğünü sorgulamak için journalctl yardımcı programını kullanın.

journalctl --grep powershell

journald daemon, günlük iletilerini bir Sistem Günlüğü Protokolü (syslog) sunucusuna iletebilir. Linux sisteminizde ForwardToSysLog günlüğe kaydetmeyi kullanmak istiyorsanız /etc/systemd/journald.confgünlüğe yapılandırma dosyasındaki seçeneğini etkinleştirin. Bu, birçok Linux dağıtımı için varsayılan yapılandırmadır.

Linux'ta syslog'da PowerShell günlük verilerini görüntüleme

Linux sisteminizde syslog günlüğü kullanmak istiyorsanız rsyslog gibi bir syslog sunucusu yüklemek için Linux dağıtımınız için paket yöneticisini kullanın. Ubuntu önyüklemesi rsysloggibi bazı Linux dağıtımları.

Syslog protokolü günlük iletilerini standartlaştırılmış bir metin biçiminde depolar. Syslog içeriğini sorgulamak veya görüntülemek herhangi bir metin işleme yardımcı programını kullanabilirsiniz.

Varsayılan olarak, syslog günlük girdilerini aşağıdaki konuma yazar:

  • Ubuntu dahil olmak üzere Debian tabanlı dağıtımlarda: /var/log/syslog
  • RHEL tabanlı dağıtımlarda: /var/log/messages

Aşağıdaki örnek, Ubuntu'da PowerShell cat girdilerini sorgulamak için komutunu kullanır.

cat /var/log/syslog | grep -i powershell

Syslog ileti biçimi

Syslog iletileri aşağıdaki biçime sahiptir:

TIMESTAMP MACHINENAME powershell[PID]: (COMMITID:TID:CID)
  [EVENTID:TASK.OPCODE.LEVEL] MESSAGE
  • TIMESTAMP - Günlük girişinin oluşturulduğu tarih/saat.
  • MACHINENAME - Günlüğün oluşturulduğu sistemin adı.
  • PID - Günlük girdisini yazan işlemin işlem kimliği.
  • COMMITID - Yapıyı oluşturmak için kullanılan git commit kimliği veya etiketi.
  • TID - Günlük girdisini yazan iş parçacığının kimliği.
  • CID - Günlük girişinin onaltılık kanal tanımlayıcısı.
    • 0x10 = İşlemsel
    • 0x11 = Analiz
  • EVENTID - Günlük girişinin olay tanımlayıcısı.
  • TASK - Olay girdisinin görev tanımlayıcısı
  • OPCODE - Olay girdisi için opcode
  • SEVİYE - Olay kaydının günlük kaydı seviyesi
  • MESSAGE - Olay girişiyle ilişkili ileti

EVENTID, TASK, OPCODEve LEVEL, Windows olay günlüğünde oturum açarken kullanılan değerlerle aynıdır.

PowerShell günlük iletisini ayrı bir dosyaya yazma

PowerShell günlük girdilerini ayrı bir dosyaya yönlendirmek de mümkündür. PowerShell günlük girdileri ayrı bir dosyaya yeniden yönlendirildiğinde, artık varsayılan syslog dosyasına yönlendirilmez.

Aşağıdaki adımlar, Ubuntu'da PowerShell günlük girdilerini powershell.logadlı bir günlük dosyasına yazacak şekilde yapılandırılır.

  1. confgibi bir metin dosyası düzenleyicisi kullanarak /etc/rsyslog.d dizininde PowerShell günlük yapılandırması için bir yapılandırma (nano) dosyası oluşturun. Dosya adına varsayılandan küçük bir sayı ekleyin. Örneğin, varsayılanın 40-powershell.confolduğu durumda 50-default.conf.

    sudo nano /etc/rsyslog.d/40-powershell.conf
    
  2. 40-powershell.conf dosyasına aşağıdaki bilgileri ekleyin:

    :syslogtag, contains, "powershell[" /var/log/powershell.log
    & stop
    
  3. /etc/rsyslog.conf yeni dosya için bir include deyimine sahip olduğunu doğrulayın. Bunu içeren genel bir deyimi olabilir, örneğin:

    $IncludeConfig /etc/rsyslog.d/*.conf
    

    Aksi takdirde, manuel olarak bir include deyimi eklemeniz gerekir.

  4. Özniteliklerin ve izinlerin uygun şekilde ayarlandığını doğrulayın.

    ls -l /etc/rsyslog.d/40-powershell.conf
    
    -rw-r--r-- 1 root root   67 Nov 28 12:51 40-powershell.conf
    

    40-powershell.conf dosyanızın sahipliği veya izinleri farklıysa aşağıdaki adımları tamamlayın:

    1. Sahipliğini kökolarak ayarlayın.

      sudo chown root:root /etc/rsyslog.d/40-powershell.conf
      
    2. Erişim izinlerini ayarla: kök okuma/yazma iznine sahiptir, kullanıcılar okuma iznine sahiptir.

      sudo chmod 644 /etc/rsyslog.d/40-powershell.conf
      
  5. rsyslog hizmetini yeniden başlatın.

    sudo systemctl restart rsyslog.service
    
  6. Günlüğe kaydedilecek PowerShell bilgilerini oluşturmak için pwsh çalıştırın.

    pwsh
    

    Not

    /var/log/powershell.log dosyası, rsyslog hizmeti yeniden başlatılana ve PowerShell günlüğe kaydedilecek bilgiler oluşturana kadar oluşturulmaz.

  7. PowerShell bilgilerinin yeni dosyaya kaydedilmekte olduğunu doğrulamak için powershell.log dosyasını sorgula.

    cat /var/log/powershell.log
    

macOS'ta PowerShell günlük verilerini görüntüleme

PowerShell, Apple'ın macOS'taki sistem ve uygulama günlüklerinin tek bir merkezi konumda toplanıp depolanmasını sağlayan birleşik günlük sistemine kayıt yapar.

Apple'ın birleşik günlük sistemi günlük iletilerini ikili biçimde depolar. PowerShell günlük olaylarının birleşik günlük sistemini sorgulamak için log aracını kullanmanız gerekir. PowerShell günlük olayları macOS'taki Konsolu uygulamasında görünmez. Konsol uygulaması, birleştirilmiş günlük sisteminden önce gelen eski syslog tabanlı günlüğü için tasarlanmıştır.

macOS'ta komut satırından PowerShell günlük verilerini görüntüleme

macOS'taki bir komut satırından PowerShell günlük verilerini görüntülemek için log veya diğer kabuk konak uygulamasındaki komutunu kullanın. Bu komutlar PowerShell, Z Shellveya Bashçalıştırılabilir.

Aşağıdaki örnekte, log komutu, sisteminizdeki günlük verilerini gerçek zamanlı olarak göstermek için kullanılır. işlem parametresi günlük verilerini yalnızca pwsh işlemi için filtreler. Birden fazla çalışan pwsh örneğiniz varsa, işlem parametresi de işlem kimliğini değeri olarak kabul eder. düzeyi parametresi, iletileri belirtilen düzeyde ve altında gösterir.

log stream --predicate "subsystem == 'com.microsoft.powershell'" --level info

Kayıt öğelerini (günlük) dışarı aktarmak için log show komutu kullanılabilir. log show komutu son N öğeleri, belirli bir zamandan bu yana öğeleri veya belirli bir zaman aralığındaki öğeleri dışarı aktarma seçenekleri sağlar.

Örneğin, aşağıdaki komut 9am on April 5, 2022itibaren öğeleri dışarı aktarır:

log show --start "2022-04-05 09:00:00" --predicate "subsystem == 'com.microsoft.powershell'"

Daha fazla bilgi için log show --help komutunun yardımını görüntülemek üzere log show çalıştırın.

Günlük verileriniN çıkışını JSON biçiminde de yapabilirsiniz. Bu sayede olay verilerini PowerShell nesnelerine dönüştürebilirsiniz. Aşağıdaki örnek, olayları JSON biçiminde oluşturur. ConvertFrom-Json cmdlet'i, JSON verilerini PowerShell nesnelerine dönüştürmek için kullanılır ve $logRecord değişkeninde depolanır.

log show --predicate "subsystem == 'com.microsoft.powershell'" --style json |
    ConvertFrom-Json | Set-Variable logRecord

Günlükleri Güvenlik Bilgileri ve Olay Yönetimi (SIEM) toplayıcısı gibi daha güvenli bir konuma kaydetmeyi de düşünebilirsiniz. Cloud Apps için Microsoft Defender'ı kullanarak Azure'da SIEM ayarlayabilirsiniz. Daha fazla bilgi için bkz. Genel SIEM tümleştirmesi.

macOS'ta PowerShell günlük verilerinin modları ve düzeyleri

Varsayılan olarak, PowerShell alt sistemi bilgi düzeyi iletilerini belleğe (mod) ve varsayılan düzeydeki iletileri diske (kalıcı depolama) macOS'ta günlüğe kaydeder. Bu davranış, log config komutu kullanılarak farklı bir modu ve günlük düzeyini etkinleştirmek için değiştirilebilir.

Aşağıdaki örnek, PowerShell alt sistemi için bilgi düzeyinde günlüğe kaydetmeyi ve kalıcılığı etkinleştirir:

sudo log config --subsystem com.microsoft.powershell --mode level:info,persist:info

Günlük ayarlarını PowerShell alt sisteminin varsayılan ayarlarına döndürmek için sıfırlama parametresini kullanın:

sudo log config --subsystem com.microsoft.powershell --reset

Ayrıca bakınız