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