如何使用Powershell获取事件消息?

时间:2011-08-24 20:17:05

标签: powershell powershell-v2.0 event-log

$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 cmdlet,则message属性返回string  关于一些错误。

  

源'服务控制中的事件ID'-1073734793'的描述   无法找到经理。本地计算机可能没有   必要的注册表信息或乱七八糟的DLL文件来显示   消息,或者您可能无权访问它们。下列   信息是事件的一部分:'SomeService','2','0','3','Run   配置的恢复程序'

2 个答案:

答案 0 :(得分:3)

尝试这样的事情,我认为这相当于你正在尝试的事情。

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 :(得分:1)

你能用WMI获得消息吗?

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