xml - por - sumar si celda comienza con
El uso de XPath inicia con o contiene funciones para buscar registros de eventos de Windows (2)
El registro de eventos de Windows admite un subconjunto de XPath 1.0. Contiene solo 3 funciones: position
, Band
, timediff
.
Referencia: http://msdn.microsoft.com/en-us/library/windows/desktop/dd996910(v=vs.85).aspx#limitations
Al editar la consulta de filtro XML manualmente en el visor de eventos de Windows, puedo encontrar eventos donde los datos coinciden exactamente con una cadena:
<QueryList>
<Query Id="0" Path="Application">
<Select Path="Application">*[EventData[Data and (Data="Session end: imzcjflrrsq1sfdk3okc4jpf")]]</Select>
</Query>
</QueryList>
Ahora, quiero hacer una coincidencia parcial:
<QueryList>
<Query Id="0" Path="Application">
<Select Path="Application">*[EventData[Data and (Data[starts-with(.,"Session")])]]</Select>
</Query>
</QueryList>
El registro de eventos me da el error:
La consulta especificada no es válida
¿Tengo la sintaxis incorrecta?
Si no le molestan dos pases, siempre puede usar una secuencia de comandos de powershell para volver a filtrar los datos ya que su operador -match
, -like
-match
, -match
, y -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
Un cmd para iniciarlo (nv.cmd):
powershell.exe -executionpolicy bypass "& ''./nv.ps1''"