Отправка вывода foreach по электронной почте - PullRequest
0 голосов
/ 06 июля 2018

У меня есть скрипт, который проверяет зеркальное состояние баз данных. Вывод в Powershell в порядке, но когда я пытаюсь отправить его по почте, я получаю «Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData» вместо самих данных. Я пытался изменить его на Out-String, но затем я получаю все результаты в одной строке. Как это сделать, чтобы форматировать вывод так же, как он был отформатирован непосредственно в PowerShell?

# rozszerzenie do obslugi 
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null;


$mail_from = "xxx";
$mail_to = "xxx";
$mail_subject = "Status mirrorowanych baz";
$mail_encoding = "UTF8";
$mail_smtp = "xxx";

# lista serwerow
$list = @("SERVER01V", 
          "SERVER02V"
                );

$output = foreach($server in $list)
{
    $srv = New-Object "Microsoft.SqlServer.Management.Smo.Server" $server;
    # pokaz tylko mirrorowane
    $databases = $srv.Databases | Where-Object {$_.IsMirroringEnabled -eq $true};
    Write-Output "<br>==================================<br>";  
    Write-Output $server;
    Write-Output "<br>==================================<br>";
    $databases | Select-Object -Property Name, MirroringStatus | Format-Table -AutoSize | Out-String;
    Write-Output "<br>";
}

$mail_body = $output;
Send-MailMessage -To $mail_to -From $mail_from -Subject $mail_subject -SmtpServer $mail_smtp -Encoding $mail_encoding -Body $mail_body -BodyAsHtml

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Попробуйте собрать все данные в массив, затем используйте командлет ConvertTo-HTML и переключатель «BodyAsHTML» в Send-MailMessage

$DatabaseArray=@()

ForEach ($server in $list) {
     $srv = New-Object "Microsoft.SqlServer.Management.Smo.Server" $server
     $DatabaseArray += $srv.Databases | Where-Object {$_.IsMirroringEnabled -eq $true} | Select-Object Name,MirroringStatus   
}

$HTMLBody = $DatabaseArray | ConvertTo-HTML

Send-MailMessage -subject x -body $HTMLBody -BodyAsHTML
0 голосов
/ 06 июля 2018

В настоящее время вы отправляете письмо в формате HTML. Поскольку такие разрывы строк не будут иметь значения. Если вы хотите, чтобы в вашей почте были разрывы строк, вам нужно либо использовать текстовый формат, либо заменить разрывы строк на <br /> или что-то подобное. Вероятно, было бы разумно вручную добавить <br /> в ваш внешний вид, чтобы иметь согласованный шаблон и заменить.

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