Powershell get-winevent filterxpath wildcard

时间:2017-05-16 00:57:42

标签: powershell xpath get-winevent

我试图查询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.']]"

现在,我希望能够使用通配符,而不是&#39; rss.weather.com。&#39;。例如,&#39; 天气&#39;。但是,据我所知,filterxpath标志不允许这样做。

我尝试添加我在互联网上看到的最常见的条目:

contains(.,'weather')

以及

contains(text(),'weather')

我几乎在代码的每个部分都尝试过这种方法,括号,没有括号,等号,没有,数据内部[] ...我已尽可能地用尽每一种可能性想一想或在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')]]]"

1 个答案:

答案 0 :(得分:0)

我最近刚刚参加了Powershell课程,并且能够通过同一个问题向我的导师发送电子邮件。他以不幸的回答回答说我的脚本不起作用的原因是因为xpath不接受未标记值的通配符。

例如,如果XML行是:

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

然后我可以对data name = *face*进行通配符搜索,但我无法对&lt;&gt;之外的内容进行通配符搜索。

谢谢大家的帮助!