我正在尝试使用 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 >= 5156 and EventID <= 5159) ) and TimeCreated[@SystemTime>='2024-04-16T11:29:31.000Z' and @SystemTime<='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”(这根本不返回结果)
我遗漏了什么?任何帮助都将不胜感激。