当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 PowerShell 进行高级事件日志过滤

作者:精品下载站 日期:2024-12-14 05:57:45 浏览:15 分类:玩电脑

使用 PowerShell 进行高级事件日志过滤


在之前的博客文章“使用 PowerShell 监控事件日志”中,我向您展示了如何使用 Get-WinEvent 使用 PowerShell 执行基本的事件日志监控。在本文中,我想演示如何使用 Get-WinEvent 使用 -FilterHashtable 参数来运行更复杂的查询。

让我们首先返回系统事件日志中的最后 50 个事件:

Get-WinEvent –LogName System –MaxEvents 50

正如我在上一篇博客文章中提到的,Get-WinEvent 允许在源头进行过滤,因此与 Get-EventLog 不同,我们不需要将结果通过管道传输到 >Where-Object cmdlet,效率较低,尤其是在通过网络从远程设备提取日志时。要创建一个简单的过滤器,我们可以使用-FilterHashtable参数:

Get-WinEvent –FilterHashtable @{logname='system'} –MaxEvents 50

上面的命令与第一个命令没有什么不同,只是我们使用 -FilterHashtable 而不是 -LogName 参数来指定日志名称。我们可以添加到哈希表并创建一个更复杂的过滤器以仅显示最后 50 个错误事件:

Get-WinEvent –FilterHashtable @{logname='system'; level=2} –MaxEvents 50

请注意,事件级别必须指定为整数,其中 2 对应于 Error 事件级别。

什么是哈希表?

从上面的命令可以看出,哈希表允许我们将键映射到值。 IE。 logname 键映射到“system”,level 映射到 2。在 PowerShell 中,哈希表通常用作在命令中指定值的一种方式,以更加简洁和直观。可读形式,无需编写一长串参数。

-FilterHashtable 参数接受以下键/值对:

[玩转系统] 使用 PowerShell 进行高级事件日志过滤

只有 LogNameProviderName 键接受通配符输入。您还可以为 Level 键指定一个整数数组:

Get-WinEvent –FilterHashtable @{logname='system'; level=2,3} –MaxEvents 50

在这里,我们获得了错误警告级别的事件。如果要指定开始时间,最好首先使用 Get-DateNew-TimeSpan cmdlet 在变量中定义它。下面定义的 $time 变量将显示从昨天开始的所有事件,即今天的日期减去 24 小时。

$time = (Get-Date) - (New-TimeSpan -Day 1)

Get-WinEvent –FilterHashtable @{logname='system'; level=2; starttime=$time}

为了进一步扩展查询,我将向哈希表添加更多键/值对。如上表所列,其中大多数都是不言自明的; 关键字除外,如您所见,它不接受字符串输入。我将在以后的文章中解释如何使用此密钥。

Get-WinEvent –FilterHashtable @{logname='system'; level=2; starttime=$time; id=20; providername=’Microsoft-Windows-WindowsUpdateClient’}

在上面的查询中,我添加了事件 IDprovidername 键。为了确定 providername 键的值,我使用 Select-Object cmdlet 输出每个事件的提供程序:

Get-WinEvent –FilterHashtable @{logname='system'; level=2; starttime=$time; id=20} | Select-Object ProviderName

在此示例中,所有返回的事件恰好都来自同一提供者,但情况可能不一定如此。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯