about_Eventlogs
简短说明
本文介绍 PowerShell 如何将事件记录到 Windows 事件日志。
长说明
Windows PowerShell 创建名为“Windows PowerShell”的 Windows 事件日志来记录 Windows PowerShell 事件。 可以通过事件查看器或通过那些获取事件的 cmdlet(例如 Get-EventLog
cmdlet)查看此日志。
默认情况下,Windows PowerShell 引擎和提供程序事件记录在事件日志中,但你可以使用事件日志首选项变量来自定义事件日志。 例如,可以添加有关 Windows PowerShell 命令的事件。
Windows PowerShell 事件日志记录 Windows PowerShell 操作(例如启动和停止程序引擎以及启动和停止 Windows PowerShell 提供程序)的详细信息。 你还可以记录有关 Windows PowerShell 命令的详细信息。
查看 Windows PowerShell 事件日志
可以通过事件查看器或者 Get-EventLog
和 Get-WmiObject
cmdlet 查看 Windows PowerShell 事件日志。 若要查看 Windows PowerShell 日志的内容,请键入:
Get-EventLog -LogName "Windows PowerShell"
若要检查事件及其属性,请使用 Sort-Object
cmdlet、Group-Object
cmdlet 以及包含 Format
谓词的 cmdlet (Format
cmdlet)。
例如,若要查看日志中按事件 ID 分组的事件,请键入:
Get-EventLog "Windows PowerShell" | Format-Table -GroupBy EventID
或者键入:
Get-EventLog "Windows PowerShell" |
Sort-Object EventID |
Group-Object EventID
若要查看所有经典事件日志,请键入:
Get-EventLog -List
还可以通过 Get-WmiObject
cmdlet 来使用与事件相关的 Windows Management Instrumentation (WMI) 类,以检查事件日志。 例如,若要查看事件日志文件的所有属性,请键入:
Get-WmiObject Win32_NTEventlogFile |
where LogFileName -EQ "Windows PowerShell" |
Format-List -Property *
若要查找与 Win32 事件相关的 WMI 类,请键入:
Get-WmiObject -List | where Name -Like "win32*event*"
有关详细信息,请参阅 Get-EventLog 和 Get-WmiObject。
选择 Windows PowerShell 事件日志的事件
可以使用事件日志首选项变量来确定 Windows PowerShell 事件日志中记录哪些事件。
有六个事件日志首选项变量;以下三个日志记录组件各有两个变量:引擎(Windows PowerShell 程序)、提供程序以及命令。 LifeCycleEvent 变量记录正常的启动和停止事件。 Health 变量记录错误事件。
下表列出了事件日志首选项变量。
变量 | 说明 |
---|---|
$LogEngineLifeCycleEvent |
记录 PowerShell 的启动和停止 |
$LogEngineHealthEvent |
记录 PowerShell 程序错误 |
$LogProviderLifeCycleEvent |
记录 PowerShell 提供程序的启动和停止 |
$LogProviderHealthEvent |
记录 PowerShell 提供程序错误 |
$LogCommandLifeCycleEvent |
记录命令的开始和完成 |
$LogCommandHealthEvent |
记录命令错误 |
(有关 Windows PowerShell 提供程序的信息,请参阅 about_Providers。)
默认情况下,仅启用以下事件类型:
$LogEngineLifeCycleEvent
$LogEngineHealthEvent
$LogProviderLifeCycleEvent
$LogProviderHealthEvent
若要启用事件类型,请将该事件类型的首选项变量设置为 $true
。 例如,若要启用命令生命周期事件,请键入:
$LogCommandLifeCycleEvent
或者键入:
$LogCommandLifeCycleEvent = $true
若要禁用事件类型,请将该事件类型的首选项变量设置为 $false
。 例如,若要禁用命令生命周期事件,请键入:
$LogProviderLifeCycleEvent = $false
可以禁用除指示 Windows PowerShell 引擎和核心提供程序启动的事件之外的任何事件。 这些事件在 Windows PowerShell 配置文件运行之前和主机程序准备好接受命令之前生成。
变量设置仅适用于当前 Windows PowerShell 会话。 若要将它们应用到所有 Windows PowerShell 会话,请将它们添加到你的 Windows PowerShell 配置文件中。
日志记录模块事件
从 Windows PowerShell 3.0 开始,可以通过将模块和管理单元的 LogPipelineExecutionDetails 属性设置为记录 Windows PowerShell 模块和管理单元$true
中的 cmdlet 和函数的执行事件。 在 Windows PowerShell 2.0 中,此功能仅适用于管理单元。
当 LogPipelineExecutionDetails 属性值为$true
时,Windows PowerShell 会将会话中的 cmdlet 和函数执行事件写入到 事件查看器 中的 Windows PowerShell 日志。 此设置仅在当前会话中有效。
若要启用对模块中 cmdlet 和函数的执行事件进行日志记录的功能,请使用以下命令序列。
Import-Module Microsoft.PowerShell.Archive
$m = Get-Module Microsoft.PowerShell.Archive
$m.LogPipelineExecutionDetails = $true
若要启用对管理单元中 cmdlet 的执行事件进行日志记录的功能,请使用以下命令序列。
$m = Get-PSSnapin Microsoft.PowerShell.Core
$m.LogPipelineExecutionDetails = $True
若要禁用日志记录,请使用相同的命令序列将属性值设置为 $false
。
还可以使用 “启用模块日志记录 组策略”设置来启用和禁用模块和管理单元日志记录。 策略值包含模块和管理单元名称的列表。 支持通配符。
为模块设置“打开模块日志记录”时,模块的 LogPipelineExecutionDetails 属性的值在所有$true
会话中,并且无法更改。
“启用模块日志记录”组策略设置位于以下组策略路径中:
Computer Configuration\
Administrative Templates\
Windows Components\
Windows PowerShell
User Configuration\
Administrative Templates\
Windows Components\
Windows PowerShell
“用户配置”策略优先于“计算机配置”策略,并且这两项策略都优先于模块和管理单元的 LogPipelineExecutionDetails 属性的值。
有关此组策略设置的详细信息,请参阅 about_Group_Policy_Settings。
安全和审核
Windows PowerShell 事件日志旨在指示活动并提供故障排除的操作详细信息。
但是,与大多数基于 Windows 的应用程序事件日志一样,Windows PowerShell 事件日志并不设计为安全。 它不应用于审核安全性或记录机密或专有信息。
事件日志旨在供用户阅读和理解。 用户可以从日志读取内容,也可以将内容写入日志。 恶意用户可以读取本地或远程计算机上的事件日志,记录虚假数据,并阻止记录其活动。
说明
模块作者可以向其模块添加日志记录功能。 有关详细信息,请参阅编写 Windows PowerShell 模块。