Как получить сообщение о событии, используя Powershell? - PullRequest
2 голосов
/ 25 августа 2011
$FilterXML = '<QueryList>
                <Query Id="0" Path="System">
                    <Select Path="System">*[System[Provider[@Name="Service Control Manager"] and (Level=2)]]</Select>
                </Query>
             </QueryList>'
$Errors = Get-WinEvent -FilterXml $FilterXML
$Errors = $Errors | ?{ $_.ToXml().Contains("SomeService") }

Проблема в том, что для каждого объекта свойство Message имеет значение null. Я могу получить некоторую информацию, используя метод .ToXml (), но не могу получить сообщение, которое вы можете увидеть в средстве просмотра событий Windows на вкладке "Общие".

Если я использую командлет Get-EventLog, свойство сообщения возвращает строку о какой-то ошибке.

Описание для идентификатора события '-1073734793' в Source 'Service Control Менеджер 'не может быть найден. Локальный компьютер может не иметь необходимая информация о реестре или файлы DLL возраста файлов для отображения сообщение, или вы не можете иметь разрешение на доступ к ним. Следующие информация является частью события: «SomeService», «2», «0», «3», «Run» настроенная программа восстановления '

Ответы [ 2 ]

3 голосов
/ 25 августа 2011

Попробуйте что-то вроде этого, что, я считаю, эквивалентно тому, что вы пытались.

get-winevent -FilterHashtable  @{LogName="System";ProviderName="Service Control Manager";Level=2} | ?{$_.message -match "someservice"}

Полагаю, Get-WinEvent может прочитать те сообщения, которые появляются как "сообщение об ошибке":

Я пробовал две эквивалентные команды. Получил ожидаемое сообщение с Git-WinEvent и сообщение об ошибке, которое вы получили с Get-EvenLog:

get-eventlog -LogName System | ?{$_.eventid -eq 10016} | select message

enter image description here

get-winevent -LogName System  | ?{$_.id -eq 10016} | select message

enter image description here

1 голос
/ 25 августа 2011

Можете ли вы получить сообщение с помощью WMI?

Get-WmiObject Win32_NTLogEvent -Filter "Logfile='system' AND SourceName='Service Control Manager' AND Message LIKE '%SomeService%'" | select Message
...