Массив PowerShell не отображает пробелы ('n) в электронной почте при использовании Send-MailMessage и отображается * вверху при использовании import-csv? - PullRequest
1 голос
/ 24 февраля 2020

У меня есть скрипт, который я запускаю, который генерирует и отправляет по электронной почте отчет на основе резервных копий, скопированных и хранящихся в нашей среде. То, что я делаю для форматирования этого отчета, это создание массива тела для включения в него различного содержимого, показанного в отчете, и для форматирования данных (имя и время последней записи резервных копий на сервере) я использую «выбрать имя, выбрать lastwritetime | export-csv 'и затем import-csv в конце в массив body с ConverTo- Html -Fragment. Это форматирует все данные соответствующим образом:

$body = @()
"" | Out-File C:\files\PrimaryBody.csv -append

Код здесь, который решает проблемы резервного копирования

("The number of backups that were not successfully copied are " + $warningErrorCount + ". ") | Out-File C:\files\PrimaryBody.csv -append

$BackupIssues | Out-File C:\files\PrimaryBody.csv -append


$OutofDateBackups | select name, LastWriteTime | export-csv -path C:\files\OutDatedBackups.csv -append -Force  

$body+= " " 

$body+= "'n"

$body+= Import-Csv -Path C:\files\PrimaryBody.csv | ConvertTo-Html -Fragment


$body+= Import-Csv -Path C:\files\OutDatedBackups.csv | ConvertTo-Html -Fragment

Результат в сообщении электронной почты, когда команда send-mailmessage Выполните следующее:

*
The number of backups that were not successfully copied are 13. 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

(я включил X только для сокрытия данных :))

Однако моя проблема заключается в том, что массив body не допускает пустую строку / пробел, который будет показан в электронном письме ... Я перепробовал много вещей, включая $body += " ", $body+= "'n", $body+= "'r'n", все, что он должен сделать, это либо полностью игнорировать пустое пространство, либо он буквально напишет 'n' в теле письма. Я не уверен, почему Это не позволит мне добавить пустое место / строку в письме. Во-вторых, независимо от того, что я делаю, в верхней части отчета всегда указывается *, как показано выше, до записи данных в import-csv. Я не уверен, почему это так и не смог его удалить. Пожалуйста, помогите, если возможно!

Заранее спасибо:)

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

вы используете частичное тело как html. Тогда не используйте массив и используйте <br /> теги как разрывы строк. Вот так:

$body = "First line"
$body += "<br />"

И при отправке почты используйте параметр переключателя -BodyAsHtml.

1 голос
/ 24 февраля 2020

Вы не должны использовать массивы для параметра body Send-MailMessage. Если вы посмотрите на справку по команде, вы увидите, что параметр [[-Body] <string>], а не [[-Body] <string[]>] Ваша проблема в том, что вы не используете строковый параметр. Если вы строите свой параметр как строку, а затем используете символы новой строки / возврата, все будет в порядке. Так что это будет прекрасно работать:

$Body = "First line of text"
$Body += "`r`nSecond line of text"

Более эффективный способ сделать это в PowerShell - использовать класс StringBuilder. NET. Вот ссылка на статью, которая мне нравится на этом топи c Powershell: объединение строк с использованием StringBuilder . StringBuilder быстрее, чем + = добавление в строку. Синтаксис немного странный, но он растет на вас. Те же данные в StringBuilder были бы:

$sb = [System.Text.StringBuilder]::new()
[void]$sb.Append('First line of text')
[void]$sb.AppendLine('Second line of text')

Чтобы использовать данные в виде строки, вам нужно использовать метод .ToString(), например:

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