Powershell 使用PSObject

Powershell 使用PSObject,powershell,Powershell,我有以下代码,用于将系统日志中的事件日志警告/错误添加到现有HTML表结构中。然而,我似乎无法让它发挥作用 $eventLogArray = @() $eventLogs = Get-EventLog -ComputerName $env:COMPUTERNAME -LogName System -EntryType Error,Warning -Newest 50 ForEach ($log in $eventLogs) { $item = New-Object -Type PSObj

我有以下代码,用于将系统日志中的事件日志警告/错误添加到现有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>       
"@
$eventLogArray=@()
$eventLogs=Get EventLog-ComputerName$env:ComputerName-LogName系统-EntryType错误,警告-50
ForEach($login$eventLogs){
$item=新对象-类型PSObject-属性@{
TimeGenerated=$log.TimeGenerated
Entry=$log.EntryType
ID=$log.EventID
Source=$log.Source
Message=$log.Message
}
$eventLogArray+=$item
}
ForEach($eventLogArray中的事件){
$body+=@”
$event
"@

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

如果您想要$eventLogArray作为HTML表:

($eventLogArray | ConvertTo-HTML -Fragment) -match '^<tr>'
($eventLogArray |转换为HTML-片段)-匹配“^”

如果希望将$eventLogArray作为HTML表:

($eventLogArray | ConvertTo-HTML -Fragment) -match '^<tr>'
($eventLogArray |转换为HTML-片段)-匹配“^”

我在理解您想要做什么时遇到问题。
$event
是一个psobject,因此当它直接在here字符串(而不是对象的属性)中引用时,结果体将如下所示:

<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>

我在理解您要执行的操作时遇到问题。
$event
是一个psobject,因此当它直接在here字符串(而不是对象的属性)中引用时,结果体将如下所示:

<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>

我不能使用ConvertTo HTML,因为上面的内容是另一个可以折叠的表中的一个表。我相信你需要使用-Fragment开关。不,它不能有开头语句。如果你只需要表行,你可以使用-match将它们去掉。我不能使用ConvertTo HTML,因为上面的内容是另一个表中的一个表另一个可以折叠的表。我相信您需要使用-Fragment开关。不,它不能有开头语句。如果您只需要表行,可以使用-match将其删除。具体操作方法:@{name=“Entry”;expression={$\ EntryType}?
Select object
可以接受哈希表来定义自定义属性。哈希表使用name/label属性作为属性名称,使用表达式作为代码来计算自定义属性的值。因此,我创建了一个自定义属性
ID
,其中值等于对象
EventID
propertylso使用选择对象方法。它执行foreach over$eventLogs所执行的操作,但采用更规范的PowerShell方式。它的行为类似于SQL Select,只选择您感兴趣的属性(并允许您使用哈希表创建新的属性).FWIW,我无法重新设置问题。$body中的数据与@Graimer看到的数据相同。我正在运行PowerShell V4。此操作的具体操作方式:@{name=“Entry”;expression={$\u.EntryType}?
Select object
可以接受哈希表来定义自定义属性。哈希表使用name/label属性作为属性名称,使用表达式作为代码来计算自定义属性的值。因此,我创建了一个自定义属性
ID
,其中值等于对象
EventID
propertylso使用选择对象方法。它执行foreach over$eventLogs所执行的操作,但采用更规范的PowerShell方式。它的行为类似于SQL Select,只选择您感兴趣的属性(并允许您使用哈希表创建新的属性).FWIW,我无法重新设置问题。$body的数据与@Graimer看到的数据相同。我正在运行PowerShell V4。