PowerShell Get-WinEvent 使用 FilterXml 选择消息属性中具有特定字符串的事件

PowerShell Get-WinEvent 使用 FilterXml 选择消息属性中具有特定字符串的事件

我正在尝试使用 powershell 查看消息属性中具有特定 IP 地址的事件日志。更具体地说,我设置 auditpol 以将 Windows 防火墙事件记录到 Windows 安全日志并在事件查看器中查看它们。如果我可以通过 PowerShell 筛选出具有我正在寻找的 IP 的事件,速度会更快。我主要在 PowerShell ISE 中工作。

$PSVersionTable

Name                           Value                                                                                                                                                         
----                           -----                                                                                                                                                         
PSVersion                      5.1.17763.5458     

以下是我用来将 Windows 防火墙事件发送到安全日志的 auditpol 命令:

#Check current status of firewall log settings
auditpol.exe /get /subcategory:'Filtering Platform Connection' | Select-string -Pattern 'Filtering Platform'
auditpol.exe /get /subcategory:'Filtering Platform Packet Drop' | Select-string -Pattern 'Filtering Platform'


#All of the above: Security 5156, 5158, 5157, and 5159:
auditpol.exe /set /subcategory:'Filtering Platform Connection' /success:enable /failure:enable

#Security Event ID 5152: The Windows Filtering Platform has blocked a packet:
auditpol.exe /set /subcategory:'Filtering Platform Packet Drop' /success:disable /failure:enable


#Check current status of firewall log settings again
auditpol.exe /get /subcategory:'Filtering Platform Connection' | Select-string -Pattern 'Filtering Platform'
auditpol.exe /get /subcategory:'Filtering Platform Packet Drop' | Select-string -Pattern 'Filtering Platform'

在事件查看器中,我筛选测试发生的特定时间范围以及那些事件 ID,然后我可以使用 find 来搜索我要查找的 IP。在本例中,假设 IP 是 10.10.7.94。我可以使用 Find 在事件查看器中查看此 IP。我返回到过滤器并从 XML 选项卡中获取语法作为 XML 查询的开头。这是最接近我想要的语法(最大事件只是为了加快测试速度):

$XmlQuery = @'
<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">*[System[(EventID=5152 or  (EventID &gt;= 5156 and EventID &lt;= 5159) ) and TimeCreated[@SystemTime&gt;='2024-04-16T11:29:31.000Z' and @SystemTime&lt;='2024-04-16T11:30:48.999Z']]]</Select>
  </Query>
</QueryList>
'@

[string]$SearchString = 10.10.7.94

Get-WinEvent -FilterXml $XmlQuery -MaxEvents 2 | Where-Object { $_.Message -like "*$SearchString*" } | select TimeCreated,ID,Message | Sort -Property TimeCreated | FL

这将返回一些事件,但它们不包含我指定的 IP 地址。我返回的消息输出示例如下:

Message     : The Windows Filtering Platform has permitted a connection.
              
              Application Information:
                Process ID:     3752
                Application Name:   \device\harddiskvolume4\windows\system32\dns.exe
              
              Network Information:
                Direction:      Inbound
                Source Address:     10.10.7.60
                Source Port:        40536
                Destination Address:    10.10.7.3
                Destination Port:       53
                Protocol:       17
              
              Filter Information:
                Filter Run-Time ID: 674097
                Layer Name:     Receive/Accept
                Layer Run-Time ID:  44

我尝试过的变化:不使用字符串转换(这根本不返回结果)在变量中用单引号和双引号括住 IP 地址(这根本不返回结果)不使用变量并将 IP 直接放在 where 过滤器中(这根本不返回结果)使用“contains”运算符而不是“like”(这根本不返回结果)

我遗漏了什么?任何帮助都将不胜感激。

相关内容