【问题标题】:ForEach loop results in a single HTML tableForEach 循环产生一个 HTML 表格
【发布时间】:2016-05-26 23:18:33
【问题描述】:

下面是我用来检查不同文件夹、检查最近的日志文件、然后报告最近的 3 个时间戳(用 [ 表示)的代码的简化版本。

$LogLocations = "C:\Powershell\Test\Scenario1",
                "C:\Powershell\Test\Scenario2"

$style = @"
<style>BODY{font-family: Arial; font-size: 10pt;}
TABLE{border: 1px solid black; border-collapse: collapse;}
TH{border: 1px solid black; background: #dddddd; padding: 5px; }
TD{border: 1px solid black; padding: 5px; }
</style>
"@

$body = ""

foreach ($logpath in $LogLocations) {
    $log  = Get-ChildItem -Path $logpath |
            sort LastWriteTime |
            select -ExpandProperty FullName -Last 1
    $text = Get-Content -Path $log |
            Select-String -SimpleMatch "[" |
            select Line -Last 3
    $body += ($text |
             select Line |
             ConvertTo-Html -Body "<p>Timestamps of 3 most recent files processed $log</p>" -Head $style |
             Out-String)
}

$emailbody = ConvertTo-Html -PostContent $body | Out-String
$subject = "Processing Logs Error Checking at " + (Get-Date -Format g)

Send-MailMessage -From "xxxxxxxxx" -To "xxxxxxxxx" -Subject $subject -Body $emailbody -BodyAsHtml -SmtpServer "xxxxxxxxx"

我得到的结果是:

最近处理的 3 个文件的时间戳 C:\Powershell\Test\Scenario1\20160520163102.txt
*
[05/21/2016 00:37:52]
[05/21/2016 00:37:52]
[05/21/2016 00:37:52]
最近处理的 3 个文件的时间戳 C:\Powershell\Test\Scenario2\20160524142045.txt
*
[05/24/2016 14:38:48]
[05/24/2016 14:38:51]
[05/24/2016 14:38:51]

这很好。我得到了我想要的信息,只是格式不是最好的。我试图找到一种将结果放在同一个表中的方法,但无法让代码工作,我会得到错误、没有结果或格式可怕的结果。

有什么想法吗?我打算将当前的foreach 语句嵌套在另一个表列的foreach 语句中。

【问题讨论】:

  • 这很好,但是您能否模拟一个视觉示例,说明您希望它在“同一张表”中显示时的样子,正如您所描述的那样?这将有助于确保答案正是您所需要的。

标签: powershell


【解决方案1】:

如果您不想要多个表,请不要创建多个表。

$emailbody = $LogLocations | ForEach-Object {
    $dir = $_
    Get-ChildItem $dir |
        Sort-Object LastWriteTime |
        Select-Object -Last 1 |
        Get-Content |
        Where-Object { $_ -like '*[*' } |
        Select-Object -Last 3 @{n='File';e={$dir.FullName}},
            @{n='Timestamp';e={$_}}
} | ConvertTo-Html -Head $style

【讨论】:

  • Get-Content 命令是否需要路径? cmdlet Get-Content at command pipeline position 1 Supply values for the following parameters: Path[0]: 这是我得到的回复。
  • 我的错误。在Select-Object -Last 1 之后应该有一个|。固定。
猜你喜欢
  • 2015-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-17
  • 2013-03-06
  • 2019-04-11
  • 1970-01-01
  • 2017-09-11
相关资源
最近更新 更多