共用方式為


about_Logging_Windows

簡短描述

PowerShell 會將引擎、提供者和 Cmdlet 的內部作業記錄到 Windows 事件記錄檔。

詳細描述

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

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

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工作會記錄這項資訊。 如需詳細資訊,請參閱 啟用腳本區塊記錄

在 Windows 上註冊 PowerShell 事件提供者

不同於Linux或macOS,Windows 需要先註冊事件提供者,才能將事件寫入事件記錄檔。 若要啟用 PowerShell 事件提供者,請從提升許可權的 PowerShell 提示字元執行下列命令。

$PSHOME\RegisterManifest.ps1

在 Windows 上檢視 PowerShell 事件記錄檔專案

您可以使用 Windows 事件檢視器 來檢視 PowerShell 記錄。 事件記錄檔位於 Application and Services 記錄群組中,並命名為 PowerShellCore 相關聯的 ETW 提供者 GUID 為 {f90714a8-5509-434a-bf6d-b1624c8a19a2}

啟用腳本區塊記錄時,PowerShell 會將下列事件記錄至 PowerShellCore/Operational 記錄:

欄位
EventId 4104 / 0x1008
通道 Operational
層級 Verbose
OpCode Create
Task CommandStart
關鍵字 Runspace

在 Windows 上取消註冊 PowerShell 事件提供者

註冊事件提供者會在用來譯碼事件的二進位連結庫中放置鎖定。 若要更新此連結庫,必須取消註冊提供者才能釋放此鎖定。

若要取消註冊 PowerShell 提供者,請從提升許可權的 PowerShell 提示字元執行下列命令。

$PSHOME\RegisterManifest.ps1 -Unregister

更新 PowerShell 之後,請執行 $PSHOME\RegisterManifest.ps1 以註冊更新的事件提供者。

啟用腳本區塊記錄

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

注意

建議您在針對診斷用途以外的任何專案使用腳本區塊記錄時,啟用受保護的事件記錄,如下所示。

腳本區塊記錄可以透過組策略或登錄設定來啟用。

使用群組原則

若要啟用自動轉譯,請透過系統管理範本 ->PowerShell Core 在組策略中啟用 [開啟 PowerShell 腳本區塊記錄] 功能。

使用登錄

執行下列函式:

function Enable-PSScriptBlockLogging {
    $basePath = @(
        'HKLM:\Software\Policies\Microsoft'
        'PowerShellCore\ScriptBlockLogging'
    ) -join '\'

    if (-not (Test-Path $basePath)) {
        $null = New-Item $basePath -Force
    }

    Set-ItemProperty $basePath -Name EnableScriptBlockLogging -Value "1"
}

使用 PowerShell 組態檔

您可以在檔案中powershell.config.json設定ScriptBlockLogging選項,以控制 PowerShell 的運作方式。 如需詳細資訊,請參閱 about_PowerSHell_Config

受保護的事件記錄

增加系統上記錄層級會增加記錄內容可能包含敏感數據的可能性。 例如,啟用腳本記錄時,腳本所使用的認證或其他敏感數據可以寫入事件記錄檔。 當已記錄敏感數據的電腦遭到入侵時,記錄可以提供攻擊者擴充其觸達所需的資訊。

為了保護這項資訊,Windows 10 引進受保護的事件記錄。 受保護的事件記錄可讓參與的應用程式加密寫入事件記錄檔的敏感數據。 稍後,您可以在更安全且集中式的記錄收集器上解密和處理這些記錄。

事件記錄檔內容會使用IETF密碼編譯訊息語法 (CMS) 標準來保護。 CMS 使用公鑰密碼編譯。 用來加密內容和解密內容的金鑰會分開。

公鑰可以廣泛共用,而且不是敏感數據。 使用此公鑰加密的任何內容只能由私鑰解密。 如需公鑰密碼編譯的詳細資訊,請參閱 維琪百科 - 公鑰密碼編譯

若要啟用受保護的事件記錄原則,請將公鑰部署到具有事件記錄檔數據要保護的所有機器。 對應的私鑰可用來在更安全的位置處理事件記錄檔,例如中央事件記錄收集器或 SIEM 匯總工具。 您可以在 Azure 中設定 SIEM。 如需詳細資訊,請參閱 泛型 SIEM 整合

透過組策略啟用受保護的事件記錄

若要啟用受保護的事件記錄,請透過 Administrative Templates -> Windows Components -> Event Logging啟用Enable Protected Event Logging組策略中的功能。 此設定需要加密憑證,您可以在下列其中一種形式中提供:

  • base-64 編碼 X.509 憑證的內容(例如,如憑證管理員中的 選項所 Export 提供)。
  • 可在本機計算機證書存儲中找到之憑證的指紋(可由 PKI 基礎結構部署)。
  • 憑證的完整路徑(可以是本機或遠端共用)。
  • 包含憑證或憑證之目錄的路徑(可以是本機或遠端共用)。
  • 可在本機計算機證書存儲中找到之憑證的主體名稱(可由 PKI 基礎結構部署)。

產生的憑證必須具有Document Encryption增強的密鑰使用方式 (1.3.6.1.4.1.311.80.1),且Data EnciphermentKey Encipherment或已啟用密鑰使用方式。

警告

私鑰不應該部署到電腦記錄事件。 它應該保留在您解密訊息的安全位置。

解密受保護的事件記錄訊息

下列腳本會擷取和解密事件,假設您有私鑰:

Get-WinEvent Microsoft-Windows-PowerShell/Operational |
    Where-Object Id -eq 4104 |
    Unprotect-CmsMessage

另請參閱