Объединение вывода HTML внутри для l oop в PowerShell - PullRequest
0 голосов
/ 04 мая 2020

Я создал сценарий PowerShell для отправки по электронной почте HTML отформатированного содержимого пользователям. В моем коде запрос SQL возвращает 3 строки, поэтому я должен получить в формате HTML 3 поля, но я получаю только последнюю запись, возвращаемую запросом SQL.

cls

$logFile = "C:\test\abc.txt"
$server =".test"
$Query = "SELECT PackageName,TaskName,EventCode,EventDescription from Logs WHERE EventDate BETWEEN DATEADD(hh,-4,GETDATE()) AND GETDATE() AND EventType='OnError'"
$search = "End Error" 
$Results= $null
$Result = $null


$LineNumber = Select-String $search $logFile | Select-Object -ExpandProperty LineNumber
 if ($LineNumber -gt 0)
 {

$Result = Invoke-Sqlcmd -ServerInstance $server -Query $Query 
$Results = Invoke-Sqlcmd -ServerInstance $server -Query $Query | measure-object

for($i = 0; $i -lt $Results.count; $i++)
       {


$Table = "<tr><th>Task Name</th><th>Error Code</th><th>Error Description</th></tr><td>" + $Result[$i].TaskName + "</td><td>" + $Result[$i].EventCode + "</td><td>" + $Result[$i].EventDescription + "</td></table><br><br></div></body></html>"

  $Header = "Package Name :" + $Result[$i].PackageName
    $Body = '
    <html><head>
    <style type="text/css"> 
        H1 {
            font-size: 15px;
            font-weight: bold;
            font-family: calibri;
        }
        table {
            border-collapse: collapse;
            border-spacing: 0;
            width: 100%;
            margin: 0px;
            padding: 0px;
        }
        p {
            font-size: 15px;
            font-family: calibri;
            font-weight: bold;
            border-bottom: 3px solid #3B3131;
        }
        tr:hover th {
            background-color: #c9c1c1;
        }
        th {
            vertical-align: middle;
            border: 1px solid #000000;
            border-width: 0px 1px 1px 0px;
            text-align: left;
            padding: 7px;
            font-size: 12px;
            font-weight: bold;
            font-family: calibri;
            border-width: 0px 1px 0px 0px;
            border: 1px solid #000000;
            background-color: #cccccc;
        }
        td {
            vertical-align: middle;
            border: 1px solid #000000;
            border-width: 0px 1px 1px 0px;
            padding: 7px;
            font-size: 13px;
            font-family: calibri;
            font-weight: normal;
            border-width: 0px 1px 0px 0px;
            border: 1px solid #000000;
        }
        .FailureCell {
            background-color: #FF0000;
            font-weight: bold;
        }
    </style> 
    </head><body> '

    $ResultantBody = $null
    $emailSubject = $null
    $emailBody = $null
    $ResultantBody = $Body + "<div class=""style""><H1>" + $Header +"</H1><table>" + $Table 
    $emailBody+=$ResultantBody

    }
    if ($Results.count -gt 1)
    {
    $emailSubject ="Test - Multiple - SSIS Failed"
    }
    else
    {
    $emailSubject ="Test -" + $Result.PackageName +" - SSIS Failed"
    }

   $emailTo =  "abc@gmail.com"
    Send-EMail -Subject $emailSubject -Body $emailBody -emailTo $emailTo
 }

Вывод, который я получаю, это только одна строка, тогда как я должен получить 3 строки из исходного запроса. Некоторые могут проверить и сообщить мне, почему результаты не добавляются.

enter image description here

1 Ответ

1 голос
/ 04 мая 2020

Вероятно, именно в этом вы и ошибаетесь.

$emailBody = $null
$ResultantBody = $Body + "<div class=""style""><H1>" + $Header +"</H1><table>" + $Table 
$emailBody+=$ResultantBody

Вы делаете это внутри al oop, добавляя в 3-ю строку, но затем присваивая ее $null в 1-й.

Таким образом, конечный результат, вы теряете все, что вы добавляете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...