Ответ 1
Соедините массив с командлетом Out-String
, чтобы преобразовать их из коллекции строковых объектов в одну строку:
PS> $body = $invalid_hosts -join "`r`n" | Out-String
У меня есть массив имен, с которыми я пытаюсь присоединиться, используя новый символ строки. У меня есть следующий код
$body = $invalid_hosts -join "`r`n"
$body = "The following files in $Path were found to be invalid and renamed `n`n" + $body
Наконец, я отправляю содержимое по электронной почте.
$From = "[email protected]"
$To = "[email protected]
$subject = "Invalid language files"
Send-MailMessage -SmtpServer "smtp.domain.com" -From $From -To $To -Subject $subject -Body $body
Когда я получаю сообщение, строка The following files in <filepath> were found to be invalid and renamed
имеет ожидаемое двойное пространство, но содержимое $invalid_hosts находится на одной строке. Я также пытался сделать
$body = $invalid_hosts -join "`n"
и
$body = [string]::join("`n", $invalid_hosts)
Ни один из способов не работает. Что мне нужно сделать, чтобы сделать эту работу?
Соедините массив с командлетом Out-String
, чтобы преобразовать их из коллекции строковых объектов в одну строку:
PS> $body = $invalid_hosts -join "`r`n" | Out-String
Я не уверен, как отвечать на все остальное, но для гарантированных строк в PowerShell используйте: [Environment]:: NewLine вместо вашего "n"
Достаточно просто вывести строку Out-String (см. fooobar.com/questions/58230/...)
$result = 'This', 'Is', 'a', 'cat'
$strResult = $result | Out-String
Write-Host $strResult
This
Is
a
cat
Пришлось решить это сегодня; подумал, что я поделюсь своим ответом, так как вопрос и другие ответы помогли мне найти решение. Вместо
$body = $invalid_hosts -join "`r`n"
$body = "The following files in $Path were found to be invalid and renamed `n`n" + $body
использование
$MessageStr = "The following files in " + $Path + " were found to be invalid and renamed"
$BodyArray = $MessageStr + $Invalid_hosts
$Body = $BodyArray -join "`r`n"