2016-05-24 99 views
0

下面是我用來檢查不同文件夾,檢查最近日誌文件,然後報告最近3個時間戳(用[表示)的代碼的簡化版本。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 以下參數的供應值: Path [0]:' 這就是我得到的響應。 – PJC83

+0

我的錯誤。應該在'Select-Object -Last 1'之後有一個'|'。固定。 –