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

[玩转系统] 使用 PowerShell 轻松查询事件日志

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

使用 PowerShell 轻松查询事件日志


如果您现在使用任何类型的本机 Active Directory (AD) 审核,您可能会喜欢它在安全事件日志中生成的信息。本机 AD 审核非常出色,可以生成有关发生的情况和时间的大量有用信息。当您真正想要阅读该信息并弄清楚发生了什么时,问题就出现了!本机 AD 审核会根据审核类型在许多不同的域控制器或客户端系统之一上生成数百种事件类型。

众所周知,本机 AD 审核会生成大量有用的信息,但也会生成大量不太有用的数据。同时,有用的信息不仅仅记录为单个事件,例如“用户 A 登录到计算机 Y”或“用户 B 在连接到域控制器 H 时删除了 GPO”。事情没那么简单。 AD 审核可能会生成 3、4 种或更多种不同类型的事件,这些事件与您要查找的单个实际事件相关,因此无法仅查看事件日志。

使用 PowerShell 的本机事件日志解析,您可以提取所有这些事件,如果编码正确,可以将实际的真实事件与事件 ID 进行匹配。

让我们通过一个示例来了解如何完成此操作。假设我需要找出谁在几台不同的计算机上启动了记事本以及何时启动。启用审核流程创建并将其应用于有问题的计算机后,我在其中一台受影响的计算机上启动记事本并收到如下事件;事件 ID 4688 以及时间和启动的 EXE (notepad.exe)。

[玩转系统] 使用 PowerShell 轻松查询事件日志

这很好,但这个事件被淹没在数千个其他事件之下。如何在多台机器上快速获取此信息?使用 PowerShell 脚本,我们需要首先找到应用了审核策略的 OU 中的所有计算机。为简单起见,在我们的示例中,我使用了域控制器 OU。我需要获取该 OU 中的所有计算机。为此,我将使用 Get-ADComputer cmdlet。

Get-ADComputer -SearchBase ‘OU=域控制器,DC=实验室,DC=本地’ -Filter * |选择-对象名称

[玩转系统] 使用 PowerShell 轻松查询事件日志

我现在有了我想要定位的所有计算机的列表。接下来,我需要知道我要查找的事件 ID。我从 MS Technet AD 审核链接得知我正在寻找事件 ID 4688。让我们在所有这些计算机上检查事件 ID 4688。

(Get-ADComputer -SearchBase ‘OU=域控制器,DC=实验室,DC=本地’ -Filter *).Name | Get-EventLog -LogName Security -InstanceId 4688

[玩转系统] 使用 PowerShell 轻松查询事件日志

你可以看到我收到了很多事件,但这些事件现在对我来说没有任何意义。该事件来自哪台计算机?这是 notepad.exe 的事件吗?让我们变得更细化。从现在开始,我不指望你完全按照我正在做的事情去做。不幸的是,没有办法像事件 ID 那样查询消息框,因此我们不能使用 Get-EventLog 来执行此操作。我们必须使用Get-WinEvent。

## 创建 XPath 查询

$EventFilterXPath=“Event[System[EventID='4688′]] 和 Event[EventData[Data[@Name='NewProcessName'] 和 (Data='C:WindowsSystem32notepad.exe')]]”

## 对所有计算机运行查询

(Get-ADComputer -SearchBase ‘OU=域控制器,DC=实验室,DC=本地’ -Filter *).Name | foreach { Get-WinEvent -ComputerName $_ -LogName Security -FilterXPath $EventFilterXPath }

现在我们实际上拥有了所需的所有事件,但我们需要找到它们来自的计算机名称,而且我们也不知道用户名。让我们解决这个问题。

(Get-ADComputer -SearchBase ‘OU=域控制器,DC=实验室,DC=本地’ -Filter *).Name | foreach { Get-WinEvent -ComputerName $_ -LogName Security -FilterXPath $EventFilterXPath } |选择对象 @{n='ComputerName';e={$_.MachineName}},@{n='Time';e={$_.TimeCreated}},@{n ='帐户';e={[regex]::Matches($_.Message,'帐户名称:s+(.*)n').Groups[1].Value.Trim()}} |格式表-自动调整大小

[玩转系统] 使用 PowerShell 轻松查询事件日志

可怕的代码,我知道。有时这是编写脚本时必须做的事情。我想知道是否有一个产品可以像这样报告 AD 审计并使其变得更加简单。

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

取消回复欢迎 发表评论:

关灯