Ответ 1
Журнал событий Windows поддерживает подмножество XPath 1.0. Он содержит только 3 функции: position
, Band
, timediff
.
Ссылка: https://docs.microsoft.com/en-us/windows/desktop/WES/consuming-events#xpath-10-limitations
Изменив запрос XML-фильтра вручную в средстве просмотра событий Windows, я могу найти события, в которых данные соответствуют строке точно:
<QueryList>
<Query Id="0" Path="Application">
<Select Path="Application">*[EventData[Data and (Data="Session end: imzcjflrrsq1sfdk3okc4jpf")]]</Select>
</Query>
</QueryList>
Теперь я хочу выполнить частичное совпадение:
<QueryList>
<Query Id="0" Path="Application">
<Select Path="Application">*[EventData[Data and (Data[starts-with(.,"Session")])]]</Select>
</Query>
</QueryList>
Журнал событий дает мне ошибку:
Указанный запрос недействителен
У меня синтаксис неправильный?
Журнал событий Windows поддерживает подмножество XPath 1.0. Он содержит только 3 функции: position
, Band
, timediff
.
Ссылка: https://docs.microsoft.com/en-us/windows/desktop/WES/consuming-events#xpath-10-limitations
Если вы не возражаете против двух проходов, вы всегда можете использовать powershell script, чтобы повторно фильтровать данные в виде Оператор -where
поддерживает -like
, -match
и -contains
:
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
Чтобы запустить его, выполните cmd (nv.cmd):
powershell.exe -executionpolicy bypass "& '.\nv.ps1'"