![Powershell 发送电子邮件消息,如何在正文变量中放置换行符](https://linux22.com/image/710887/Powershell%20%E5%8F%91%E9%80%81%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6%E6%B6%88%E6%81%AF%EF%BC%8C%E5%A6%82%E4%BD%95%E5%9C%A8%E6%AD%A3%E6%96%87%E5%8F%98%E9%87%8F%E4%B8%AD%E6%94%BE%E7%BD%AE%E6%8D%A2%E8%A1%8C%E7%AC%A6.png)
我正在文件夹中的多个文件中搜索一个字符串。如果我找到该字符串,那么我想通过电子邮件发送所有包含该字符串的文件夹。我已经弄清楚了这一切,并调整了我想要的格式。
问题是当我发送电子邮件时,内容全部显示在一行中。我希望此文本逐字分解。以下是代码:
$find = Get-Childitem –Path C:\inetpub\wwwroot\*\Web.config | Select-String -Pattern "abc..config"
$boards = $find.Path | Out-String
[array]$split = $boards.Split("\")
$count = $split.Count
$out = for ($i=0; $i -le $count; $i++) {
$split[$i+3]
$i = $i + 3
}
$out2 = $out | Out-String
Send-mailmessage -from "" -to "" -subject "Test" -body $out2 -BodyAsHtml -priority High -dno onFailure -smtpServer
问题是正文显示如下:ABC ABC2
但是,我希望身体是这样的:
ABC
ABC2
我也尝试将输出发送到文本文件并使用 -Raw 和 gci:
$find = Get-Childitem –Path C:\inetpub\wwwroot\*\Web.config | Select-String -Pattern "abc..config"
$boards = $find.Path | Out-String
[array]$split = $boards.Split("\")
$count = $split.Count
$out = for ($i=0; $i -le $count; $i++) {
$split[$i+3]
$i = $i + 3
}
$out | Out-file -FilePath C:\Test.txt
$body = Get-content C:\Test.txt -Raw
Send-mailmessage -from "" -to "" -subject "Test" -body $body -BodyAsHtml -priority High -dno onFailure -smtpServer
我确实在 gci 中使用了 Out-String 和 -Raw,而且我使用的是 V4。不知道我遗漏了什么。当我输出文件时,它是正确的格式,带有换行符,但当我发送电子邮件时却不是。我宁愿不创建文本文档,而只是在正文中使用变量。
谢谢
答案1
邮件正文的内容不是 HTML,但您使用的-bodyAsHtml
是 send-mailmessage。您的正文只是文本,当您指定-bodyAsHTML
它时会导致换行符被删除。删除-bodyAsHtml
应该可以解决您的问题。
在 HTML 文档中,换行符用<P>
、表示<BR>
,并且仅当它们出现在 内部时才会保留<PRE>
。