简短说明
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 事件日志位于 Application and Services Logs 组中。 Windows PowerShell 日志是不使用 Windows 事件技术的经典事件日志。 要查看日志,请使用专为经典事件日志设计的 cmdlet,例如 Get-EventLog.
查看 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-Help Get-EventLog”和“Get-Help Get-WmiObject”。
选择 Windows PowerShell 事件日志的事件
可以使用事件日志首选项变量来确定 Windows PowerShell 事件日志中记录哪些事件。
有六个事件日志首选项变量;以下三个日志记录组件各有两个变量:引擎(Windows PowerShell 程序)、提供程序以及命令。 LifeCycleEvent 变量记录正常的启动和停止事件。 Health 变量记录错误事件。
下表列出了事件日志首选项变量。
| 变量 | DESCRIPTION |
|---|---|
| $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 属性设置为 TRUE,来记录 Windows PowerShell 模块和管理单元中 cmdlet 和函数的执行事件。 在 Windows PowerShell 2.0 中,此功能仅适用于管理单元。
当 LogPipelineExecutionDetails 属性值为 TRUE ()$true 时,Windows PowerShell 会将会话中的 cmdlet 和函数执行事件写入事件查看器中的 Windows PowerShell 日志。 此设置仅在当前会话中有效。
若要启用对模块中 cmdlet 和函数的执行事件进行日志记录的功能,请使用以下命令序列。
Import-Module <ModuleName>
$m = Get-Module <ModuleName>
$m.LogPipelineExecutionDetails = $true
若要启用对管理单元中 cmdlet 的执行事件进行日志记录的功能,请使用以下命令序列。
$m = Get-PSSnapin <SnapInName> [-Registered]
$m.LogPipelineExecutionDetails = $True
要禁用日志记录,请使用相同的命令序列将属性值设置为 FALSE ()。$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 事件日志并非设计为安全的。 它不应用于审核安全性或记录机密或专有信息。
事件日志旨在供用户阅读和理解。 用户可以从日志读取内容,也可以将内容写入日志。 恶意用户可以读取本地或远程计算机上的事件日志,记录虚假数据,并阻止记录其活动。
注释
模块作者可以向其模块添加日志记录功能。 有关更多信息,请参见 MSDN 库中的 编写 Windows PowerShell 模块 。