Присоедините массив с новой строкой в ​​PowerShell

У меня есть массив имен, с которыми я пытаюсь присоединиться, используя новый символ строки. У меня есть следующий код

$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)

Ни один из способов не работает. Что мне нужно сделать, чтобы сделать эту работу?

Ответ 1

Соедините массив с командлетом Out-String, чтобы преобразовать их из коллекции строковых объектов в одну строку:

PS> $body = $invalid_hosts -join "`r`n" | Out-String

Ответ 2

Я не уверен, как отвечать на все остальное, но для гарантированных строк в PowerShell используйте: [Environment]:: NewLine вместо вашего "n"

Ответ 3

Достаточно просто вывести строку Out-String (см. fooobar.com/questions/58230/...)

 $result = 'This', 'Is', 'a', 'cat'
 $strResult = $result  | Out-String
 Write-Host $strResult
This
Is
a
cat

Ответ 4

Пришлось решить это сегодня; подумал, что я поделюсь своим ответом, так как вопрос и другие ответы помогли мне найти решение. Вместо

$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"