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
- 值:
Operational
、Analytic
- 描述:要啟用的通道。 指定多個值時,請以逗號分隔值。 預設值是
Operational
。
- 值:
- LogLevel
- 值:
Always
、、、Critical
、Warning
Error
、Informational
、Verbose
、Debug
- 描述:指定單一值。 這些值會以遞增的順序列出。 您選擇的值會自行啟用,以及它之前的所有值。 預設值是
Informational
。
- 值:
- LogKeywords
- 值:
Runspace
、、Pipeline
、、Host
Transport
Protocol
、Cmdlets
、Serializer
Session
ManagedPlugin
- 描述:關鍵詞可讓您將記錄限制在PowerShell內的特定元件。 根據預設,所有關鍵詞都會啟用,而且變更此值只適用於特製化疑難解答。
- 值:
- PowerShellPolicies
- 描述:PowerShellPolicies 設定包含 ModuleLogging、ProtectedEventLogging 和 ScriptBlockLogging 選項。 如需詳細資訊,請參閱 一般組態設定。
在 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 - 與事件專案相關聯的訊息
EVENTID、 TASK、 OPCODE 和 LEVEL 與登入 Windows 事件記錄檔時所使用的值相同。
將 PowerShell 記錄訊息寫入個別的檔案
您也可以將 PowerShell 記錄專案重新導向至個別的檔案。 當 PowerShell 記錄專案重新導向至個別的檔案時,它們就不會再記錄到預設的 syslog 檔案。
下列步驟會將Ubuntu上的PowerShell記錄專案設定為寫入名為的 powershell.log
記錄檔。
使用文字文件編輯器,在目錄中建立 PowerShell 記錄組態
/etc/rsyslog.d
的組態檔 (conf
) 檔案,例如nano
。 在檔名前面加上小於預設值的數位。 例如,40-powershell.conf
預設值為50-default.conf
。sudo nano /etc/rsyslog.d/40-powershell.conf
將下列資訊新增至
40-powershell.conf
檔案::syslogtag, contains, "powershell[" /var/log/powershell.log & stop
確認有
/etc/rsyslog.conf
新檔案的 include 語句。 它可能有包含它的泛型語句,例如:$IncludeConfig /etc/rsyslog.d/*.conf
如果沒有,您必須手動新增 include 語句。
確認已適當設定屬性和許可權。
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
如果您的檔案具有不同的擁有權或許可權,請完成下列步驟:將擁有權設定為 root。
sudo chown root:root /etc/rsyslog.d/40-powershell.conf
設定訪問許可權: root 具有讀取/寫入、 使用者 已讀取。
sudo chmod 644 /etc/rsyslog.d/40-powershell.conf
重新啟動 rsyslog 服務。
sudo systemctl restart rsyslog.service
執行
pwsh
以產生要記錄的PowerShell資訊。pwsh
注意
/var/log/powershell.log
在重新啟動 rsyslog 服務之前,不會建立檔案,且 PowerShell 會產生要記錄的資訊。powershell.log
查詢檔案,以確認 PowerShell 資訊正在記錄到新檔案。cat /var/log/powershell.log
在macOS上檢視PowerShell記錄數據
PowerShell 會記錄至 Apple 的統一記錄系統,這是 macOS 的功能,可讓您在單一集中式位置收集及儲存系統和應用程式記錄。
Apple 的統一記錄系統會以二進位格式儲存記錄訊息。 使用主控台應用程式或記錄工具來查詢PowerShell專案的整合記錄系統。
在 macOS 上的控制台應用程式中檢視 PowerShell 記錄數據
macOS 上的控制台應用程式是一個公用程式,可提供圖形使用者介面來檢視記錄數據。 主控台應用程式預設隨附於 macOS 中,而且可以透過在 [應用程式] 資料夾中開啟 [公用程式] 資料夾來存取。
使用下列步驟,在 macOS 上的控制台應用程式中檢視 PowerShell 記錄資料:
- 搜尋 主控台 應用程式並加以啟動。
- 選取 [裝置] 底下的 [計算機名稱]。
- 在 [ 搜尋 ] 字段中,輸入
pwsh
PowerShell 主要二進位檔,然後按 return。 - 將搜尋篩選從
Any
變更為Process
。 - 按一下 [開始] 。
- 執行
pwsh
以產生要記錄的PowerShell資訊。
執行中 PowerShell 實例的進程標識碼會儲存在變數中 $PID
。 使用下列步驟來篩選控制台應用程式中PowerShell的特定進程實例。
- 執行的
pwsh
實例。 $PID
在上一個步驟中啟動的PowerShell實例中執行,以判斷其進程標識碼。- 在 [搜尋] 字段中輸入 的進程標識符
pwsh
,然後按 return。 - 將搜尋篩選從
Any
變更為PID
。 - 按一下 [開始] 。
- 從第一個步驟中啟動的PowerShell實例產生PowerShell資訊來記錄。
如需詳細資訊,請參閱 在Mac上的控制台中檢視記錄訊息。
從 macOS 上的命令行檢視 PowerShell 記錄數據
若要從 macOS 上的命令行檢視 PowerShell 記錄數據,請使用log
終端機或其他殼層主機應用程式中的 命令。 這些命令可以從 PowerShell、Z 殼層 (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 整合。
另請參閱
- 如需 Linux syslog 和 rsyslog.conf 資訊,請參閱 Linux 計算機的本機
man
頁面 - 如需macOS 記錄 資訊,請參閱 Apple關於記錄的開發人員檔
- 針對 Windows,請參閱 about_Logging_Windows
- 一般 SIEM 整合
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應