繁体   English   中英

PowerShell 数组在使用 Send-MailMessage 时未在电子邮件中显示空格 ('n) 并在使用 import-csv 时在顶部显示 *?

[英]PowerShell array not showing spaces ('n) in email when using Send-MailMessage and shows * at the top when using import-csv?

我有一个正在运行的脚本,它根据在我们的环境中复制和保存的备份生成报告并通过电子邮件发送。 我正在做的格式化此报告是创建一个主体数组以包含报告中显示的各种内容,并且为了格式化数据(服务器上备份的名称和上次写入时间),我正在使用“选择名称,选择最后写入时间 | export-csv',然后在最后使用 ConverTo-Html -Fragment 将 import-csv 导入到 body 数组中。 这适当地格式化所有数据:

$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中的数据写入之前,总是在报告顶部报告一个*,如上图所示。 我不知道为什么会这样并且一直无法删除它。 如果可能,请帮助!

提前致谢 :)

您不应将数组用于 Send-MailMessage 的 body 参数。 如果您查看该命令的帮助,您会看到参数是[[-Body] <string>]而不是[[-Body] <string[]>]您的问题是您没有使用字符串参数。 如果您将参数构建为字符串,然后使用换行符/返回字符,就可以了。 所以这将工作得很好:

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

在 PowerShell 中执行此操作的更有效方法是使用 StringBuilder .NET 类。 这是我喜欢的一篇关于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()

您正在使用部分正文作为 html。 然后不要使用数组并使用<br />标签作为换行符。 像这样:

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

并在发送邮件时使用-BodyAsHtml开关参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM