2016-05-24 2 views
0

Ниже приведена упрощенная версия кода, который я использую для проверки разных папок, проверки последнего файла журнала и отчета о последних трех временных отметках (обозначается [).Результат цикла ForEach в одной таблице HTML

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

В результате я получаю:

Timestamps of 3 most recent files processed C:\Powershell\Test\Scenario1\20160520163102.txt 
* 
[05/21/2016 00:37:52] 
[05/21/2016 00:37:52] 
[05/21/2016 00:37:52] 
Timestamps of 3 most recent files processed 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 для столбцов таблицы.

+1

Это замечательно, но можете ли вы нарисовать визуальный пример того, как вы хотите, чтобы он выглядел, пока он отображается «в той же таблице», как вы описали? Это поможет обеспечить ответы именно так, как вам нужно. – gravity

ответ

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

Требует ли команда 'Get-Content' путь? 'cmdlet Get-Content на командном конвейере 1 Значения для следующих параметров: Путь [0]:' Это ответ, который я получаю. – PJC83

+0

Моя ошибка. Предполагалось, что будет '' 'после' Select-Object -Last 1'. Исправлена. –

Смежные вопросы