我有以下代码,用于将系统日志中的事件日志警告/错误添加到现有的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 +=
时它失败但没有任何错误,我的表只包含没有事件日志条目。有什么想法吗?
答案 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>'