【问题标题】:Get-EventLog - valid message missing for some event log sourcesGet-EventLog - 某些事件日志源缺少有效消息
【发布时间】:2015-10-02 12:23:33
【问题描述】:

我正在使用 get-eventlog 提取和过滤系统事件日志数据。我发现 get-event 日志无法正确返回与某些条目关联的消息。这些条目通常出现在事件日志查看器中。例如

get-eventlog -logname system | ? { $_.source -eq "Microsoft-Windows-Kernel-General" }

返回 8 个条目,所有条目都有如下形式的消息:

The description for Event ID '12' in Source 'Microsoft-Windows-Kernel-General' cannot be found.  
The local computer may not have the necessary registry information or message DLL files to display the message, or you may not have permission to access them.  
The following information is part of the event:'6', '1', '7601', '18798', '1', '0', '2015-06-13T08:33:32.359599800Z'

如果我过滤同一来源的系统事件日志,我可以清楚地看到完整的消息。例如

The operating system started at system time ‎2015‎-‎06‎-‎13T08:33:32.359599800Z.

我运行以下命令来查看是否有任何其他提供者无法返回有效的事件消息:

get-eventlog -LogName system | ? { $_.Message -like "The description for Event ID*" }  | Group-Object -Property Source | Select-Object -Property Name

Name
----
Microsoft-Windows-Kernel-General
DCOM
WinRM
Microsoft-Windows-Iphlpsvc

我检查了事件日志查看器以找到 DCOM、WinRM 和 Iphlpsvc 源的相应条目,并确认可以看到正确的消息。

我已经在管理员级别的 PowerShell 控制台中运行了测试脚本。

有什么想法吗?

编辑:进一步的研究表明 PsLogList 似乎也遇到了同样的问题,而 WEVTUTIL 没有。

编辑:根据 Windos 的建议,我尝试了 get-winevent。我之前尝试过这个,发现它根本不会返回任何消息数据。我再次尝试并发现相同的结果。然后我尝试了

Get-WinEvent -ProviderName "Microsoft-Windows-Kernel-General"

产生以下错误

Could not retrieve information about the Microsoft-Windows-Kernel-General provider. Error: The locale specific resource for the desired message is not present.

在谷歌上搜索了一下,我找到了“https://p0w3rsh3ll.wordpress.com/2013/12/13/why-does-my-get-winevent-command-fail/”,他也遇到了同样的错误消息。他认为这是由于地区环境造成的。我在澳大利亚,所以我在控制面板中的“格式”设置是“英语(澳大利亚)”。我将其更改为“英语(美国)”,启动了新的 PS 控制台,通过get-culture 确认我现在在美国,然后重新运行了get-winevent 命令。

Get-WinEvent -ProviderName "Microsoft-Windows-Kernel-General" | select-object -property Message

你瞧……

Message
-------
The system time has changed to ?2015?-?07?-?12T01:06:52.405000000Z from ?2015?-?07?-?12T01:05:51.764208900Z.
The system time has changed to ?2015?-?07?-?12T01:05:09.671000000Z from ?2015?-?07?-?12T01:04:09.226010500Z.
The system time has changed to ?2015?-?07?-?12T01:03:49.119000000Z from ?2015?-?07?-?12T01:02:48.060593100Z.
The system time has changed to ?2015?-?07?-?12T01:02:32.128000000Z from ?2015?-?07?-?12T01:01:29.610105600Z.
The system time has changed to ?2015?-?06?-?13T08:41:12.267000000Z from ?2015?-?06?-?13T08:41:12.404273100Z.
The operating system started at system time ?2015?-?06?-?13T08:33:32.359599800Z.
The operating system is shutting down at system time ?2015?-?06?-?13T08:33:05.091743100Z.
The system time has changed to ?2015?-?06?-?13T08:32:58.947000000Z from ?2015?-?06?-?13T08:32:58.947959900Z.

但遗憾的是 - 没有任何变化 get-eventlog

get-eventlog -logname system | ? { $_.Source -eq "microsoft-windows-kernel-general" } | select-object -property Message

Message
-------
The description for Event ID '1' in Source 'Microsoft-Windows-Kernel-General' cannot be found.  The local computer m...
The description for Event ID '1' in Source 'Microsoft-Windows-Kernel-General' cannot be found.  The local computer m...
The description for Event ID '1' in Source 'Microsoft-Windows-Kernel-General' cannot be found.  The local computer m...
The description for Event ID '1' in Source 'Microsoft-Windows-Kernel-General' cannot be found.  The local computer m...
The description for Event ID '1' in Source 'Microsoft-Windows-Kernel-General' cannot be found.  The local computer m...
The description for Event ID '12' in Source 'Microsoft-Windows-Kernel-General' cannot be found.  The local computer ...
The description for Event ID '13' in Source 'Microsoft-Windows-Kernel-General' cannot be found.  The local computer ...
The description for Event ID '1' in Source 'Microsoft-Windows-Kernel-General' cannot be found.  The local computer m...

【问题讨论】:

    标签: powershell event-log get-eventlog


    【解决方案1】:

    不确定如何或为什么,但看起来如果您选择Get-WinEvent 而不是Get-EventLog,您将获得所需的信息。

    需要注意的是,在更改命令时,“Source”参数被称为“ProviderName”,因此您的命令变为:

    Get-WinEvent -LogName System | Where { $_.ProviderName -eq 'Microsoft-Windows-Kernel-General' }
    

    【讨论】:

    • 我已经尝试过get-winevent,但发现它没有返回任何事件的消息值(!)。我确实根据您的建议再次尝试了它,但它仍然没有返回任何结果。事实上,Get-WinEvent -LogName System | ? { $_.Message -ne $null } 命令不会返回任何对象。但后来我尝试了别的东西......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    相关资源
    最近更新 更多