使用Powershell通过HTML电子邮件表格格式化阵列输出

时间:2016-10-26 17:59:42

标签: powershell

我尝试从数组中构建表,然后将其放入电子邮件中。我能够让表格显示数组中的第一个项目,但无法获得要列出的其余项目。我觉得我很接近,关于我可能缺少的任何想法。

$global:Report = "C:\TEMP\Scripts\PowerShell\ReadExcelFiles\File.csv"
$UViolation = import-csv $global:Report -Delimiter '    ' | Where-Object {$_.Rules -eq "TESTTEXTINFILE"}
$UserViolationDetails = New-Object System.Collections.ArrayList

foreach ($item in $UViolation){
    if ($item.Destination -notcontains "HP ") {
    $UserViolationDetails += ,@($item.'User Name', $item.'Occurred (Endpoint)',$item.'IP Address',$item.'Computer Name',$item.Destination)
    }
}
$UserID = "USERID01"
$events = $UserViolationDetails -match $UserID
$count = 0
foreach ($line in $events){
    $count++
    $table = @( @{'User ID'=$line[0]; 'DateTime'=$line[1]})
}
$count
$table.ForEach({[PSCustomObject]$_}) | Format-Table -AutoSize

$ol = New-Object -comObject Outlook.Application
$mail = $ol.CreateItem(0) 
$mail.To = "$global:UserReportsToEmail"
$mail.cc = "EMAIL@DOMAIN.com"
$mail.Subject = "mySubject" 
$mail.HTMLBody = 
"<font color ='blue'><b>TESTING STUFFFF!</b></font><br>
Text on a new line $UserID<br>$table"

$inspector = $mail.GetInspector
$inspector.Display()

2 个答案:

答案 0 :(得分:2)

$table = @( @{'User ID'=$line[0]; 'DateTime'=$line[1]})

您将此处的每一行设置为单个元素数组。

$table = @()
foreach ($line in $events){
    $count++
    $table += @{'User ID'=$line[0]; 'DateTime'=$line[1]}
}

这会提前创建数组,并在添加项目时附加项目。

答案 1 :(得分:0)

我能够通过html正文添加以下内容来输出表变量($out):

$out = $table.ForEach({[PSCustomObject]$_}) |ConvertTo-Html |Out-String