about_Logging_Non-Windows

Kısa açıklama

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

Uzun açıklama

PowerShell, altyapıyı başlatma ve durdurma, sağlayıcıları başlatma ve durdurma gibi PowerShell işlemlerinin ayrıntılarını günlüğe 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.

  • Linux'ta PowerShell, bir syslog sunucusuna iletilebilen sistemli günlüğe günlükler. Daha fazla bilgi için Bkz man . Linux dağıtımınızın sayfaları.
  • macOS'ta Apple'ın birleşik günlük sistemi kullanılır. Daha fazla bilgi için Apple'ın günlük kaydıyla ilgili geliştirici belgelerine bakın.

PowerShell iki günlük kategorisinin yapılandırılmasını 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 bkz . about_PowerShell_Config.

    Modül günlüğü yapılandırma aracılığıyla etkinleştirilirse, modülün LogPipelineExecutionDetails özelliğinin değerini 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 bloklarının, 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ı dosyada powershell.config.json depolanır. Dosyapowershell.config.json, PowerShell $PSHOME dizininde bulunan JSON biçimli 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.

PowerShell varsayılan olarak kanalda günlüğe kaydetmeyi Operational etkinleştirirInformational. 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 şeklindedir 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.
  • LogChannels
    • 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 şudur: 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 şudur: Informational.
  • LogKeywords
    • Değerler: Runspace, , , Protocol, Transport, Host, , SerializerCmdlets, SessionPipeline,ManagedPlugin
    • Açıklama: Anahtar sözcükler, günlüğü 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, ProtectedEventLogging ve 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 günlüklenmiş daemon'u kullanarak sistemli günlüğe günlükler.

Günlüklenen daemon günlük iletilerini ikili biçimde depolar. journalctl PowerShell girdileri için günlük günlüğünü sorgulamak için yardımcı programını kullanın.

journalctl --grep powershell

Günlüklenen daemon, günlük iletilerini bir Sistem Günlüğü Protokolü (syslog) sunucusuna iletebilir. ForwardToSysLog Linux sisteminizde /etc/systemd/journald.confsyslog günlüğü kullanmak istiyorsanız günlük kaydı yapılandırma dosyasındaki seçeneği 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ükleme rsyslog gibi 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 için 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 syslog girdilerini sorgulamak için komutunu kullanırcat.

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 - Derlemeyi oluşturmak için kullanılan git işleme kimliği veya etiketi.
  • TID - Günlük girdisini yazan iş parçacığının iş parçacığı kimliği.
  • CID - Günlük girişinin onaltılık kanal tanımlayıcısı.
    • 0x10 = İşlemsel
    • 0x11 = Analiz
  • EVENTID - Günlük girdisinin olay tanımlayıcısı.
  • TASK - Olay girdisinin görev tanımlayıcısı
  • OPCODE - Olay girişi için opcode
  • LEVEL - Olay girdisinin günlük düzeyi
  • MESSAGE - Olay girişiyle ilişkilendirilmiş ileti

EVENTID, TASK, OPCODE ve 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 günlüğe kaydedilmez.

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

  1. gibi nanobir metin dosyası düzenleyicisi kullanarak dizinde /etc/rsyslog.d PowerShell günlük yapılandırması için bir yapılandırma (conf) dosyası oluşturun. Dosya adına varsayılandan küçük bir sayı ekleyin. Örneğin, 40-powershell.conf burada varsayılan değer şeklindedir 50-default.conf.

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

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

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

    Aksi takdirde, el ile 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
    

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

    1. Sahipliği kök olarak ayarlayın.

      sudo chown root:root /etc/rsyslog.d/40-powershell.conf
      
    2. Erişim izinlerini ayarlama: kökte okuma/yazma, kullanıcıların okuması vardır.

      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 komutunu çalıştırın pwsh .

    pwsh
    

    Not

    Rsyslog /var/log/powershell.log hizmeti yeniden başlatılana ve PowerShell günlüğe kaydedilecek bilgileri oluşturana kadar dosya oluşturulmaz.

  7. PowerShell bilgilerinin yeni dosyaya powershell.log kaydedilmekte olduğunu doğrulamak için dosyayı sorgulayabilir.

    cat /var/log/powershell.log
    

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

PowerShell, sistem ve uygulama günlüklerinin tek bir merkezi konumda toplanmasına ve depolanmasına olanak tanıyan bir macOS özelliği olan Apple'ın birleşik günlük sistemine günlükler.

Apple'ın birleşik günlük sistemi günlük iletilerini ikili biçimde depolar. PowerShell girdileri için birleşik günlük sistemini sorgulamak için Konsol uygulamasını veya günlük aracını kullanın.

macOS'ta Konsol uygulamasında PowerShell günlük verilerini görüntüleme

macOS üzerindeki Konsol uygulaması, günlük verilerini görüntülemek için grafik kullanıcı arabirimi sağlayan bir yardımcı programdır. Konsol uygulaması varsayılan olarak macOS'a dahil edilir ve Uygulamalar klasöründeki Yardımcı Programlar klasörü açılarak erişilebilir.

macOS üzerinde Konsol uygulamasında PowerShell günlük verilerini görüntülemek için aşağıdaki adımları kullanın:

  1. Konsol uygulamasını arayın ve başlatın.
  2. Cihazlar'ın altında Makine adını seçin.
  3. Arama alanına PowerShell ana ikili dosyasını girin pwsh ve return tuşuna basın.
  4. Arama filtresini olarak AnyProcessdeğiştirin.
  5. Başlat'a tıklayın.
  6. Günlüğe kaydedilecek PowerShell bilgilerini oluşturmak için komutunu çalıştırın pwsh .

PowerShell'in çalışan bir örneğinin işlem kimliği değişkeninde $PID depolanır. Konsol uygulamasında PowerShell'in belirli bir işlem örneğine filtre uygulamak için aşağıdaki adımları kullanın.

  1. örneğini pwshçalıştırın.
  2. İşlem kimliğini belirlemek için önceki adımda başlatılan PowerShell örneğinde komutunu çalıştırın $PID .
  3. Arama alanına için pwshişlem kimliğini girin ve return tuşuna basın.
  4. Arama filtresini olarak AnyPIDdeğiştirin.
  5. Başlat'a tıklayın.
  6. İlk adımda başlatılan PowerShell örneğinden oturum açmak için PowerShell bilgileri oluşturun.

Daha fazla bilgi için bkz . Mac konsolunda günlük iletilerini görüntüleme.

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 Terminal veya diğer kabuk ana bilgisayar uygulamasında komutunu kullanınlog. Bu komutlar PowerShell, Z kabuğu (Zsh) veya Bash'ten çalıştırılabilir.

Aşağıdaki örnekte komutu, log sisteminizde gerçek zamanlı olarak gerçekleşen günlük verilerini göstermek için kullanılır. İşlem parametresi yalnızca pwsh işlem için günlük verilerini filtreler. Birden fazla çalıştırma örneğin pwsh varsa, işlem parametresi değeri olarak bir işlem kimliği de kabul eder. level parametresi, iletileri belirtilen düzeyde ve altında gösterir.

log stream --process pwsh --level info

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üzey iletileri macOS'ta diske (kalıcılık) günlüğe kaydeder. Bu davranış, komutunu kullanarak log config 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 geri döndürmek için reset parametresini kullanın:

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

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

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

log show --info --start "2022-04-05 09:00:00" --process pwsh

Daha fazla bilgi için komutunu çalıştırarak log show --help komutun yardımını log show görüntüleyin.

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

Ayrıca bkz.

  • Linux syslog ve rsyslog.conf bilgileri için Linux bilgisayarın yerel man sayfalarına bakın
  • macOS günlük bilgileri için apple'ın günlük kaydıyla ilgili geliştirici belgelerine bakın
  • Windows için bkz. about_Logging_Windows
  • Genel SIEM tümleştirmesi