如何在PowerShell脚本中获取电子邮件正文中的回车符?

3
我已经创建了一个PowerShell脚本来收集一些系统统计信息并将其发送邮件,我希望在正文中插入换行符,以便一切都不会混乱。
有人知道如何在下面的脚本中实现这一点吗?
Process{
 $strComputerName = (Get-WmiObject -Class Win32_ComputerSystem | Select-Object Name).Name
 $strComputerModel = (Get-WmiObject -Class Win32_ComputerSystem | Select-Object Model).Model
 $strSerialNumber = (Get-WmiObject -Class Win32_BIOS | Select-Object SerialNumber).SerialNumber
 $strDate = Get-Date
 $erroractionpreference = "SilentlyContinue"
 $strSMTP = $server
 $strSubject = $subject
 $strBody = "Hostname: $strComputerName Model: $strComputerModel Serial: $strSerialNumber Date: $strDate"
 $MailMessage = New-Object System.Net.Mail.MailMessage
 $MailMessage.IsBodyHtml = $true
 $SMTPClient = New-Object System.Net.Mail.smtpClient
 $SMTPClient.host = $strSMTP
 $Sender = New-Object System.Net.Mail.MailAddress($from, "ConfigMgr")
 $Recipient = New-Object System.Net.Mail.MailAddress($to)
 $MailMessage.Sender = $Sender
 $MailMessage.From = $Sender
 $MailMessage.Subject = $strSubject
 $MailMessage.To.add($Recipient)
 $MailMessage.Body = $strBody
 $SMTPClient.Send($MailMessage)
}

有人试图为 $strBody 输出获取 CR,有人知道怎么做吗?

谢谢 :)

2个回答

1
当使用Send-MailMessage时,(反引号)n和(反引号)r(换行符)均无效。我不得不切换到HTML。
 Send-MailMessage -From foo@bar.com -To "me@my.com" 
   -SmtpServer foo.bar.com -Subject "my subject" 
   -Body ($fileText -join "<br/>") -BodyAsHtml

$fileText是一个字符串数组。


1

有几种方法可以实现这个目标。

如果你只是想在分配给 $strBody 的项目中进行分隔,就像代码中所示,我会将该行更改为。

$strBody = "Hostname: $strComputerName`r`n Model: $strComputerModel`r`n Serial: $strSerialNumber`r`n Date: $strDate"

backtick+r 和 backtick+n 是 PowerShell 中的回车和换行转义序列。

你也可以使用 Environment 类中的常量,像这样。

$strBody = "Hostname: $strComputerName{0} Model: $strComputerModel{0} Serial: $strSerialNumber{0} Date: $strDate" -f [Environment]::NewLine

如果我误解了你的问题或者这个方法对你不起作用,请告诉我。


您说得对,虽然在$strBody中寻找回车和换行符号,但似乎并没有起作用,电子邮件的格式仍然是单行显示。我想知道这是否与System.Net.Mail.smtpClient内置方法的构建方式有关。 - user1709091

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接