Filtragem do log de eventos XML do log atual em que EventData contém texto

3

Estou tentando pesquisar no log de eventos do Windows qualquer coisa em que os dados do evento contenham a cadeia TCP Provider, error: 0 como parte de uma mensagem de erro mais longa. Para fazer isso, criei o código abaixo:

<QueryList>
  <Query Id="0" Path="Application">
    <Select Path="Application">*[System[Provider[@Name='MyDemo' or @Name='AnotherDemo'] and (Level=2 or Level=3)]][EventData[Data[contains(.,'TCP Provider, error: 0')]]]</Select>
  </Query>
</QueryList>

No entanto, isso é visto como uma consulta inválida - suponho que a instrução contains não seja reconhecida (pois parece que uma versão especial da sintaxe XPath está sendo usada aqui. Alguém sabe se o que estou tentando é possível / como fazer isso?

Agradecemos antecipadamente

JB

    
por JohnLBevan 26.02.2013 / 19:24

2 respostas

3

Você sempre pode usar um script powershell e passar o XML por meio da função where do powershell (suporta -contains -like -match):

nv.ps1

$Query = @"
  <QueryList>
    <Query Id="0" Path="System">
      <Select Path="System">
        *[System[(EventID=20001)]]
      </Select>
    </Query>
  </QueryList>
"@

$events = Get-WinEvent -FilterXml $Query
ForEach ($Event in $Events) {
    # Convert the event to XML
    $eventXML = [xml]$Event.ToXml()
    Add-Member -InputObject $Event -MemberType NoteProperty -Force -Name  DriverVersion -Value $eventXML.Event.UserData.InstallDeviceID.DriverVersion
    Add-Member -InputObject $Event -MemberType NoteProperty -Force -Name  DriverDescription -Value $eventXML.Event.UserData.InstallDeviceID.DriverDescription
    Add-Member -InputObject $Event -MemberType NoteProperty -Force -Name  Data -Value $eventXML.Event.EventData.Data
}
$Events | Select TimeCreated, Id, DriverDescription, DriverVersion, ProviderName, @{Name="MessageData";Expression={$_.Message + $_.Data}} | Where {$_.DriverDescription -match "NVIDIA GeForce GTX*"} | Out-GridView
pause

Um cmd para iniciá-lo (nv.cmd):

powershell.exe -executionpolicy bypass "& '.\nv.ps1'"
    
por 16.10.2015 / 20:01
3

Em uma investigação mais detalhada, encontrei uma resposta para isso no Stack Overflow: link

Portanto, parece que não é possível fazer pesquisas com curinga no log de eventos.

    
por 26.02.2013 / 19:37