about_Logging_Windows
簡短描述
PowerShell 會將引擎、提供者和 Cmdlet 的內部作業記錄到 Windows 事件記錄檔。
完整描述
PowerShell 會記錄 PowerShell 作業的詳細數據,例如啟動和停止引擎和提供者,以及執行 PowerShell 命令。
注意
Windows PowerShell 3.0、4.0、5.0 和 5.1 版包含 Windows 事件記錄檔的 EventLog Cmdlet。 在這些版本中,若要顯示 EventLog Cmdlet 的清單,請輸入: Get-Command -Noun EventLog
。 如需詳細資訊,請參閱 Cmdlet 檔和about_EventLogs版本 Windows PowerShell。
在 Windows 上檢視 PowerShell 事件記錄專案
您可以使用 Windows 事件檢視器 來檢視 PowerShell 記錄。 事件記錄檔位於 [應用程式和服務記錄] 群組中,並命名為 PowerShellCore
。 相關聯的 ETW 提供者 GUID
為 {f90714a8-5509-434a-bf6d-b1624c8a19a2}
。
啟用文稿區塊記錄時,PowerShell 會將下列事件記錄到 PowerShellCore/Operational
記錄:
欄位 | 值 |
---|---|
EventId | 4104 / 0x1008 |
通路 | Operational |
層級 | Verbose |
OpCode | Create |
工作 | CommandStart |
關鍵字 | Runspace |
在 Windows 上註冊 PowerShell 事件提供者
不同於Linux或macOS,Windows 需要先註冊事件提供者,才能將事件寫入事件記錄檔。 若要啟用 PowerShell 事件提供者,請從提升許可權的 PowerShell 提示字元執行下列命令。
$PSHOME\RegisterManifest.ps1
在 Windows 上取消註冊 PowerShell 事件提供者
註冊事件提供者會在用來譯碼事件的二進位連結庫中放置鎖定。 若要更新此連結庫,必須取消註冊提供者才能釋放此鎖定。
若要取消註冊 PowerShell 提供者,請從提升許可權的 PowerShell 提示字元執行下列命令。
$PSHOME\RegisterManifest.ps1 -Unregister
更新 PowerShell 之後,請執行 $PSHOME\RegisterManifest.ps1
以註冊更新的事件提供者。
啟用腳本區塊記錄
當您啟用文本區塊記錄時,PowerShell 會記錄其處理之所有腳本區塊的內容。 啟用之後,任何新的PowerShell工作會記錄這項資訊。
注意
針對診斷用途以外的任何專案使用腳本區塊記錄時,建議啟用受保護的事件記錄,如下所述。
腳本區塊記錄可以透過 群組原則 或登錄設定來啟用。
使用群組原則
若要啟用自動轉譯,請Turn on PowerShell Script Block Logging
透過 Administrative Templates -> Windows Components -> Windows PowerShell
啟用 群組原則 中的功能。
使用登錄
執行下列函式:
function Enable-PSScriptBlockLogging
{
$basePath = 'HKLM:\Software\Policies\Microsoft\Windows' +
'\PowerShell\ScriptBlockLogging'
if(-not (Test-Path $basePath))
{
$null = New-Item $basePath -Force
}
Set-ItemProperty $basePath -Name EnableScriptBlockLogging -Value "1"
}
受保護的事件記錄
增加系統上的記錄層級會增加記錄內容可能包含敏感數據的可能性。 例如,啟用腳本記錄時,腳本所使用的認證或其他敏感數據可以寫入事件記錄檔。 當已記錄敏感數據的電腦遭到入侵時,記錄可以提供攻擊者擴充其觸達所需的資訊。
為了保護此資訊,Windows 10 引進受保護的事件記錄。 受保護的事件記錄可讓參與的應用程式加密寫入事件記錄檔的敏感數據。 稍後,您可以在更安全且集中的記錄收集器上解密和處理這些記錄。
事件記錄檔內容會使用IETF密碼編譯訊息語法 (CMS) 標準來保護。 CMS 使用公鑰密碼編譯。 用來加密內容和解密內容的金鑰會分開。
公鑰可以廣泛共用,而且不是敏感數據。 使用此公鑰加密的任何內容只能由私鑰解密。 如需公鑰密碼編譯的詳細資訊,請參閱 Wikipedia - 公鑰密碼編譯。
若要啟用受保護的事件記錄原則,請將公鑰部署到具有事件記錄檔數據要保護的所有機器。 對應的私鑰可用來在更安全的位置上處理事件記錄檔,例如中央事件記錄收集器或 SIEM 匯總工具。 您可以在 Azure 中設定 SIEM。 如需詳細資訊,請參閱 一般 SIEM 整合。
透過 群組原則 啟用受保護的事件記錄
若要啟用受保護的事件記錄,請Enable Protected Event Logging
透過 Administrative Templates -> Windows Components -> Event Logging
啟用 群組原則 中的功能。 此設定需要加密憑證,您可以在下列其中一種形式中提供:
- 例如,Base-64 編碼 X.509 憑證的內容 (,如憑證管理員) 中的 選項所提供
Export
。 - 您可以在本機計算機證書存儲中找到的憑證指紋, (可由 PKI 基礎結構) 部署。
- 憑證 (的完整路徑可以是本機或遠端共用) 。
- 包含憑證或憑證的目錄路徑 (可以是本機或遠端共用) 。
- 您可以在本機計算機證書存儲中找到的憑證主體名稱, (可由 PKI 基礎結構) 部署。
產生的憑證必須具有 Document Encryption
增強的密鑰使用方式, (1.3.6.1.4.1.311.80.1
) ,以及 Data Encipherment
啟用 或 Key Encipherment
金鑰使用方式。
警告
私鑰不應部署到電腦記錄事件。 它應該保留在您解密訊息的安全位置。
解密受保護的事件記錄訊息
假設您有私鑰,下列腳本會擷取和解密:
Get-WinEvent Microsoft-Windows-PowerShell/Operational |
Where-Object Id -eq 4104 | Unprotect-CmsMessage