使用PSObject

时间:2013-11-16 14:18:10

标签: powershell

我有以下代码,用于将系统日志中的事件日志警告/错误添加到现有的HTML表结构中。但是,我似乎无法让它发挥作用。

$eventLogArray = @()
$eventLogs = Get-EventLog -ComputerName $env:COMPUTERNAME -LogName System -EntryType Error,Warning -Newest 50
ForEach ($log in $eventLogs) {
    $item = New-Object -Type PSObject -Property @{
    TimeGenerated = $log.TimeGenerated
    Entry = $log.EntryType
    ID = $log.EventID
    Source = $log.Source
    Message = $log.Message
    }
    $eventLogArray += $item 
}


ForEach($event in $eventLogArray) {
    $body += @"
    <tr bgcolor="#EEEEEE"> 
      <td>$event</td> 
    </tr>       
"@

每个$event包含数组$eventLogArray中的正确条目,但是当它执行$body +=时它失败但没有任何错误,我的表只包含没有事件日志条目。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

我在理解你想做什么时遇到了问题。 $event是一个psobject,所以当它直接在here-string中引用时(而不是对象的属性),你的结果体看起来像:

<tr bgcolor="#EEEEEE"> 
      <td>@{TimeGenerated=10/24/2013 22:52:19; Entry=Error; ID=36887; Source=Schannel; Message=A fatal alert was received from the remote endpoin
t. The TLS protocol defined fatal alert code is 40.}</td> 
</tr>

这就是你想要的吗?

您还可以使用管道简化和加速代码,并将第一个foreach循环替换为select-object。上面的输出是使用下面的代码生成的,所以它正在工作。

Get-EventLog -ComputerName $env:COMPUTERNAME -LogName System -EntryType Error,Warning -Newest 50 | 
Select-Object TimeGenerated, @{name="Entry";expression={$_.EntryType}}, @{name="ID";expression={$_.EventID}}, Source, Message | 
ForEach-Object {
    $body += @"
    <tr bgcolor="#EEEEEE"> 
      <td>$_</td> 
    </tr>       
"@
}

答案 1 :(得分:2)

如果您想将$ eventLogArray作为HTML表格:

($eventLogArray | ConvertTo-HTML -Fragment) -match '^<tr>'