powershell:get-winevent没有消息数据?

时间:2012-05-10 13:25:59

标签: powershell event-log event-viewer

当我运行下面的脚本来检索日志文件时,get-winevent“message”字段为空,但是如果我运行get-eventlog则有数据。有什么想法吗?

#has message data 
Get-Eventlog -LogName application -Newest 10

 #date 10 days ago 
$EventStartDate = get-date("10 May 2012") 
$EventEndDate = get-date("11 May 2012") 
$EventLogNames = @("Application", "system")

#critea for winevent 
$EventCritea = @{logname = $EventLogNames; StartTime=$EventStartDate; EndTime=$EventEndDate}

#Retrieves the event log 
$RetreivedEvents = Get-WinEvent -computername localhost -FilterHashtable $EventCritea
$RetreivedEvents | fl id, logname, MachineName, Message, TimeCreated

6 个答案:

答案 0 :(得分:7)

你在哪个地区运行?

有一个.NET错误,其中基础.NET方法(Get-WinEvent使用的)无法在某些语言环境(如Message)中填充本地化字段(如en-GB)。< / p>

修复是切换到命令的en-US

$orgCulture = Get-Culture
[System.Threading.Thread]::CurrentThread.CurrentCulture = New-Object "System.Globalization.CultureInfo" "en-US"
# Perform Get-WinEvent
[System.Threading.Thread]::CurrentThread.CurrentCulture = $orgCulture

答案 1 :(得分:2)

我认为这是因为消息隐藏在属性值中。要显示所有消息,请使用以下表达式将get-winevent传递给select语句:

@{Label='Messages';Expression={$_.properties.Value}}

如果您希望显示特定消息,例如登录过程(在安全日志中),请使用以下表达式:

@{Label='Logon Process';Expression={$_.properties.Value[3]}}

答案 2 :(得分:0)

我知道我曾经看过get-winevent在过去尝试时不能在Windows Server 2003上运行。基本上PS环境说get-winevent在2003年不起作用。那可能是PS v1那么,所以我不确定是否用新版本的PS解决了这个问题:我现在在2K8 R2上。

在我的

答案 3 :(得分:0)

你在运行什么PSHost?

我在Windows 7上运行PS V2.0时遇到问题,访问W2k8。如果在Powershell控制台或Powershell ISE中运行,它将检索所有数据。但是,如果在运行空间或PowerGUI(pro)中运行,它只返回一个不包含Message属性的部分子集。

[编辑] 理查德的帖子允许我解决这个问题,但这很奇怪,因为工作PS控制台中的文化是'en-GB',而非工作的PowerGui脚本编辑器中的文化是'en-GB',只有当我改变时才有效“en-US”的文化。

怪异

答案 4 :(得分:0)

在我的脚本顶部添加以下行为我工作(取自Richards代码片段);

[System.Threading.Thread]::CurrentThread.CurrentCulture = New-Object "System.Globalization.CultureInfo" "en-US"

答案 5 :(得分:0)

[PS 2.0]请注意,文化更改仅对当前管道有效。 见Culture Gotchas

因此临时更改culture + get-winevent的命令需要在脚本块(包含在“{...}”内)或在一行中以“;”分组。

我尝试在Server 2008上使用系统日志时使用get-winevent时发现了这一点。消息显示为空,我需要将文化从nl-BE更改为en-US。