$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 配置的恢复程序'
答案 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
get-winevent -LogName System | ?{$_.id -eq 10016} | select message
答案 1 :(得分:1)
你能用WMI获得消息吗?
Get-WmiObject Win32_NTLogEvent -Filter "Logfile='system' AND SourceName='Service Control Manager' AND Message LIKE '%SomeService%'" | select Message