PowerShell get-winevent筛选器xpath通配符

3
我试图查询DNS日志,以查看哪台本地计算机请求了包含38.93.53.202-in-addr.arpa-nettlinx.com的网站地址。我不知道这将在日志中呈现出什么形式,使用事件日志进行过滤没有效果(太慢了)。我认为PowerShell可以帮助我完成这个任务!我已经导出了日志,所以我可以留下一台备用系统分析,而我则进行日常工作。到目前为止,我找到了一个几乎符合我的要求的脚本。我选择了日志中前几个条目之一进行测试。
<EventData>
  <Data Name="TCP">0</Data> 
  <Data Name="InterfaceIP">192.168.1.1</Data> 
  <Data Name="Destination">192.168.1.2</Data>
  <Data Name="QNAME">rss.weather.com.</Data>

我找到的几乎可以工作的代码是: Get-WinEvent -Path 'C:\users\user\desktop\evtlog.evtx' -FilterXPath "*[EventData[ Data[@Name='qname']='rss.weather.com.']]" 现在,我想使用通配符,例如“weather”,而不是“rss.weather.com.”。然而,据我所知,过滤器xpath标志不允许这样做。
我已经尝试添加互联网上最常见的条目: contains(.,'weather') 以及 contains(text(),'weather') 我几乎在代码的每个部分都尝试过这种方法,有括号,没有括号,有等号,没有,在data[]内部......我已经用XML解析语言中能想到或找到的所有可能性。
有没有任何一种方法可以执行我正在尝试的查询类型?我正在尝试找到在管道之前执行此操作的方法,因为日志的大小相当惊人。
编辑:以下是我可以想到的大多数迭代版本:
# Try 1
# "*[EventData[Data[@Name='qname' and contains(text(), 'weather')]]]"

# Try 2
# "*[EventData[ Data[@Name='qname'] contains(.,'weather')]]"

# Try 3
# "*[EventData[ Data[contains(.,'weather')]]]"

# Try 4
# "*[EventData[ Data[@Name='qname']=*[contains(.,'weather')]]]"

# Try 5
# "*[EventData[ Data[@Name='qname']=*contains(.,'weather')]]"

# Try 6
# "*[EventData[ Data[@Name='qname']=contains(.,'weather')]]"

# Try 7
# "*[EventData[ Data[@Name='qname']=[contains(.,'weather')]]]"

# Try 8
# "*[EventData[ contains(.,'weather') ]]"

# Try 9
# "*[EventData[ Data[@Name='qname'] like 'rss.weather.com.']]"

# Try 10
# "*[EventData[Data[@Name='QNAME']=*[contains(.,'rss.weather.com.')]]]"

# Try 11
# "*[EventData[ Data[@Name='qname']=*'weather.com.']]"

# Try 12
# "*[EventData[ Data[@Name='qname']=*['weather.com.']]]"

# Try 13
# "*[EventData[ Data[@Name='qname'] contains(.,'weather')]]"

# Try 14
# "*[EventData[ Data[@Name='qname'] [contains(.,'weather')]]]"

你试过 EventData[Data[@Name='qname' and contains(text(), 'weather')]] 吗?分享一下你的尝试。 - Andersson
我已经编辑了我的主要帖子,展示了我尝试过的各种迭代。每个都导致相同的错误:指定的查询无效。 - Finch
添加双斜杠(//*)会改变什么吗? - Andersson
我在几次迭代中添加了 //,但这只导致良好的查询失败。我尝试了 "//*[EventData//"*[EventData"*[//EventData"*//[EventData - 所有都返回了相同的问题。 - Finch
1个回答

0

我最近刚学了一门Powershell课程,所以我向我的讲师发送了同样的问题。他回答说不幸的是,我的脚本无法正常工作的原因是xpath不接受非标记值的通配符。

例如,如果XML的行是:

<Data Name="InterfaceIP">192.168.1.1</Data>

那么我可以对 data name = *face* 进行通配符搜索,但我无法对 <> 之外的内容进行通配符搜索。

感谢大家的帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接