2016-05-24 7 views
0

以下は、異なるフォルダをチェックし、最新のログファイルをチェックし、最新の3つのタイムスタンプ([と表示)を使用するコードの簡略版です。For Eachループの結果が単一の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コマンドパイプライン位置1でのGet-Content 次のパラメータの値を指定します。 Path [0]:' これは私が得る応答です。 – PJC83

+0

私の間違い。 'Select-Object -Last 1'の後に' | 'があったはずです。一定。 –

関連する問題