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-EventLogGet-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-EventLogGet-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 模块

另请参阅