共用方式為


about_Logging_Non-Windows

簡短描述

PowerShell 會記錄引擎、提供者和 Cmdlet 的內部作業。

詳細描述

PowerShell 會記錄 PowerShell 作業的詳細數據,例如啟動和停止引擎和啟動和停止提供者。 它也會記錄PowerShell命令的詳細數據。

如需有關在 Windows PowerShell 5.1 中記錄的資訊,請參閱 about_Logging

PowerShell 記錄的位置取決於目標平臺。

  • 在 Linux 上,PowerShell 會記錄至可以轉送至 syslog 伺服器的 systemd 日誌。 如需詳細資訊,請參閱 man Linux 發行版的頁面。
  • 在macOS上,會使用Apple的統一記錄系統。 如需詳細資訊,請參閱 Apple關於記錄的開發人員檔。

PowerShell 支援設定兩種記錄類別:

  • 模組記錄 - 記錄指定模組成員的管線執行事件。 會話和特定模組都必須啟用模組記錄。 如需設定此記錄的詳細資訊,請參閱 about_PowerShell_Config

    如果模組記錄是透過組態啟用,您可以藉由設定模組的 LogPipelineExecutionDetails 屬性值,在會話中啟用和停用特定模組的記錄。

    例如,若要啟用 PSReadLine 模組的模組記錄:

    $psrl = Get-Module PSReadLine
    $psrl.LogPipelineExecutionDetails = $true
    Get-Module PSReadline | Select-Object Name, LogPipelineExecutionDetails
    
    Name       LogPipelineExecutionDetails
    ----       ---------------------------
    PSReadLine                        True
    
  • 腳本區塊記錄 - 記錄命令、腳本區塊、函式和腳本的處理,無論是以互動方式叫用,還是透過自動化。

    當您啟用文本區塊記錄時,PowerShell 會記錄它處理的所有腳本區塊內容。 啟用之後,任何新的PowerShell工作會記錄這項資訊。

    注意

    建議在針對診斷用途以外的任何專案使用腳本區塊記錄時,啟用受保護的事件記錄。 如需詳細資訊,請參閱 about_PowerShell_Config

在 Linux 或 macOS 上設定記錄

Linux 和 macOS 上記錄的組態會儲存在 檔案中 powershell.config.json 。 檔案powershell.config.json位於PowerShell $PSHOME 目錄中的JSON格式檔案。 如果此組態檔不存在,您必須建立它來變更預設設定。 PowerShell 的每個安裝都會使用此檔案的專屬複本。

根據預設,PowerShell 會啟用 Informational 對通道的 Operational 記錄。 如果您需要其他記錄輸出,例如詳細資訊或啟用分析記錄輸出,您可以變更設定。

下列程式代碼是範例組態:

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

以下是設定 PowerShell 記錄的屬性清單。 如果屬性未列在組態中,PowerShell 會使用預設值。

  • LogIdentity
    • 值:<string name>powershell
    • 描述:記錄時要使用的名稱。 預設身分識別為 powershell。 這個值可用來判斷 PowerShell 安裝兩個實例之間的差異,例如版本和 Beta 版本。 這個值也可用來將記錄輸出重新導向至個別的檔案。
  • LogChannels
    • 值:OperationalAnalytic
    • 描述:要啟用的通道。 指定多個值時,請以逗號分隔值。 預設值是 Operational
  • LogLevel
    • 值:Always、、、CriticalWarningErrorInformationalVerboseDebug
    • 描述:指定單一值。 這些值會以遞增的順序列出。 您選擇的值會自行啟用,以及它之前的所有值。 預設值是 Informational
  • LogKeywords
    • 值:Runspace、、Pipeline、、HostTransportProtocolCmdletsSerializerSessionManagedPlugin
    • 描述:關鍵詞可讓您將記錄限制在PowerShell內的特定元件。 根據預設,所有關鍵詞都會啟用,而且變更此值只適用於特製化疑難解答。
  • PowerShellPolicies
    • 描述:PowerShellPolicies 設定包含 ModuleLogging、ProtectedEventLoggingScriptBlockLogging 選項。 如需詳細資訊,請參閱 一般組態設定

在 Linux 上檢視紀錄中的 PowerShell 記錄數據

PowerShell 會使用 Linux 散發套件上的日誌精靈,例如 Ubuntu 和 Red Hat Enterprise Linux (RHEL) 等日誌精靈,記錄至 systemd 日誌。

日誌精靈會以二進位格式儲存記錄訊息。 journalctl使用 公用程式來查詢 PowerShell 專案的記錄。

journalctl --grep powershell

日誌精靈可以將記錄訊息轉送至系統記錄通訊協定 (syslog) 伺服器。 ForwardToSysLog如果您想要在 Linux 系統上使用 syslog 記錄,請在日誌組態檔中啟用 選項/etc/systemd/journald.conf。 這是許多 Linux 發行版的預設組態。

在 Linux 上的 syslog 中檢視 PowerShell 記錄數據

如果您想要在Linux系統上使用 syslog 記錄,請使用Linux發行版的套件管理員來安裝 syslog 伺服器,例如 rsyslog 。 某些 Linux 發行版,例如 Ubuntu 預安裝 rsyslog

syslog 通訊協定會以標準化文字格式儲存記錄訊息。 您可以使用任何文字處理公用程式來查詢或檢視 syslog 內容。

根據預設, syslog 會將記錄專案寫入下列位置:

  • 在 Debian 型散發套件上,包括 Ubuntu: /var/log/syslog
  • 在以 RHEL 為基礎的散發套件上: /var/log/messages

下列範例會 cat 使用 命令來查詢Ubuntu上的PowerShell syslog 專案。

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

Syslog 訊息格式

Syslog 訊息的格式如下:

TIMESTAMP MACHINENAME powershell[PID]: (COMMITID:TID:CID)
  [EVENTID:TASK.OPCODE.LEVEL] MESSAGE
  • TIMESTAMP - 產生記錄專案的日期/時間。
  • MACHINENAME - 產生記錄之系統的名稱。
  • PID - 寫入記錄專案之進程的進程識別碼。
  • COMMITID - 用來產生組建的 Git 認可 識別碼或標記。
  • TID - 寫入記錄專案之線程的線程識別碼。
  • CID - 記錄專案的十六進位通道識別碼。
    • 0x10 = 操作
    • 0x11 = Analytic
  • EVENTID - 記錄專案的事件識別碼。
  • TASK - 事件專案的工作識別碼
  • OPCODE - 事件專案的 opcode
  • LEVEL - 事件項目的記錄層級
  • MESSAGE - 與事件專案相關聯的訊息

EVENTIDTASKOPCODELEVEL 與登入 Windows 事件記錄檔時所使用的值相同。

將 PowerShell 記錄訊息寫入個別的檔案

您也可以將 PowerShell 記錄專案重新導向至個別的檔案。 當 PowerShell 記錄專案重新導向至個別的檔案時,它們就不會再記錄到預設的 syslog 檔案。

下列步驟會將Ubuntu上的PowerShell記錄專案設定為寫入名為的 powershell.log記錄檔。

  1. 使用文字文件編輯器,在目錄中建立 PowerShell 記錄組態/etc/rsyslog.d的組態檔 (conf) 檔案,例如 nano。 在檔名前面加上小於預設值的數位。 例如, 40-powershell.conf 預設值為 50-default.conf

    sudo nano /etc/rsyslog.d/40-powershell.conf
    
  2. 將下列資訊新增至 40-powershell.conf 檔案:

    :syslogtag, contains, "powershell[" /var/log/powershell.log
    & stop
    
  3. 確認有 /etc/rsyslog.conf 新檔案的 include 語句。 它可能有包含它的泛型語句,例如:

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

    如果沒有,您必須手動新增 include 語句。

  4. 確認已適當設定屬性和許可權。

    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如果您的檔案具有不同的擁有權或許可權,請完成下列步驟:

    1. 將擁有權設定為 root

      sudo chown root:root /etc/rsyslog.d/40-powershell.conf
      
    2. 設定訪問許可權: root 具有讀取/寫入、 使用者 已讀取。

      sudo chmod 644 /etc/rsyslog.d/40-powershell.conf
      
  5. 重新啟動 rsyslog 服務。

    sudo systemctl restart rsyslog.service
    
  6. 執行 pwsh 以產生要記錄的PowerShell資訊。

    pwsh
    

    注意

    /var/log/powershell.log在重新啟動 rsyslog 服務之前,不會建立檔案,且 PowerShell 會產生要記錄的資訊。

  7. powershell.log查詢檔案,以確認 PowerShell 資訊正在記錄到新檔案。

    cat /var/log/powershell.log
    

在macOS上檢視PowerShell記錄數據

PowerShell 會記錄至 Apple 的統一記錄系統,這是 macOS 的功能,可讓您在單一集中式位置收集及儲存系統和應用程式記錄。

Apple 的統一記錄系統會以二進位格式儲存記錄訊息。 使用主控台應用程式或記錄工具來查詢PowerShell專案的整合記錄系統。

在 macOS 上的控制台應用程式中檢視 PowerShell 記錄數據

macOS 上的控制台應用程式是一個公用程式,可提供圖形使用者介面來檢視記錄數據。 主控台應用程式預設隨附於 macOS 中,而且可以透過在 [應用程式] 資料夾中開啟 [公用程式] 資料夾來存取

使用下列步驟,在 macOS 上的控制台應用程式中檢視 PowerShell 記錄資料:

  1. 搜尋 主控台 應用程式並加以啟動。
  2. 選取 [裝置] 底下的 [計算機名稱]。
  3. 在 [ 搜尋 ] 字段中,輸入 pwsh PowerShell 主要二進位檔,然後按 return
  4. 將搜尋篩選從 Any 變更為 Process
  5. 按一下 [開始]
  6. 執行 pwsh 以產生要記錄的PowerShell資訊。

執行中 PowerShell 實例的進程標識碼會儲存在變數中 $PID 。 使用下列步驟來篩選控制台應用程式中PowerShell的特定進程實例。

  1. 執行的 pwsh實例。
  2. $PID在上一個步驟中啟動的PowerShell實例中執行,以判斷其進程標識碼。
  3. 在 [搜尋] 字段中輸入 的進程標識符pwsh,然後按 return。
  4. 將搜尋篩選從 Any 變更為 PID
  5. 按一下 [開始]
  6. 從第一個步驟中啟動的PowerShell實例產生PowerShell資訊來記錄。

如需詳細資訊,請參閱 在Mac上的控制台中檢視記錄訊息。

從 macOS 上的命令行檢視 PowerShell 記錄數據

若要從 macOS 上的命令行檢視 PowerShell 記錄數據,請使用log終端機或其他殼層主機應用程式中的 命令。 這些命令可以從 PowerShellZ 殼層Zsh) 或 Bash 執行

在下列範例中, log 命令會用來顯示系統上的記錄數據,因為其會實時發生。 進程參數只會pwsh篩選進程的記錄數據。 如果您有一個以上的實例執行 pwsh進程參數也會接受進程 標識碼作為其值。 level 參數會顯示指定層級和下方的訊息。

log stream --process pwsh --level info

macOS 上的 PowerShell 記錄數據的模式和層級

根據預設,PowerShell 子系統會將資訊層級訊息記錄到記憶體(模式),並將預設層級訊息記錄到macOS上的磁碟(持續性)。 您可以變更此行為,以使用 log config 命令啟用不同的模式和記錄層級。

下列範例會啟用 PowerShell 子系統的資訊層級記錄和持續性:

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

使用 reset 參數將記錄設定還原為 PowerShell 子系統的預設值:

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

log show命令可用來匯出記錄專案。 log show此命令提供匯出指定時間后的最後N一個專案、專案,或指定時間範圍內的項目的選項。

例如,下列命令會匯出項目,因為 9am on April 5 of 2022

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

如需詳細資訊,請執行 log show --help 以檢視命令的說明 log show

您也可以考慮將記錄儲存到更安全的位置,例如 安全性資訊和事件管理 (SIEM) 匯總工具。 使用 適用於雲端的 Microsoft Defender Apps,您可以在 Azure 中設定 SIEM。 如需詳細資訊,請參閱 泛型 SIEM 整合

另請參閱