在Powershell中创建多行电子邮件正文

Nin*_*irl 1 email powershell

当我尝试实现多行电子邮件正文时,我不断收到错误消息。我怀疑语法错误。找不到在线示例。有什么建议么?

错误: Unexpected token 'EmployeeName"] to $AccountExpire"' in expression or statement.

$subject = "Email for $item["EmployeeName"]. Date expire $AccountExpire"
$body=@"                            
Name:  $item["Employee"]
Class: Contractor
Depart: $item["Depart"]
Region: $item["Region"]
Manager: $item["Manager"]
New Date: $NewDate                          
"@                      
SendUpdateEmail($subject,$Body)
Run Code Online (Sandbox Code Playgroud)

Mat*_*sen 6

您需要使用子表达式($())对这些数组索引操作进行转义:

$subject = "Email for $($item["EmployeeName"]). Date expire $AccountExpire"
Run Code Online (Sandbox Code Playgroud)

多行字符串(或在这里被正式称为here的字符串)也是如此:

$body=@"                            
Name:  $($item["Employee"])
Class: Contractor
# and so on...                 
"@
Run Code Online (Sandbox Code Playgroud)

就个人而言,我将使用多行模板,并使用-fformat运算符填写值:

$bodyTemplate=@'
Name: {0}
Class: Contractor
Depart: {1}
Region: {2}
Manager: {3}
New Date: {4}
'@
$body = $bodyTemplate -f $item["Employee"],$item["Depart"],$item["Region"],$item["Manager"],$NewDate
Run Code Online (Sandbox Code Playgroud)

使用时-f,您还可以设置不同类型的数据的格式,因此,如果$NewDate是[DateTime]对象,则可以在模板内部控制其格式,例如:

@'
Date: {0:HH:mm:ss}
'@ -f (Get-Date)
Run Code Online (Sandbox Code Playgroud)

会产生:

Date: 14:55:09
Run Code Online (Sandbox Code Playgroud)

(假设您在下午五点到三点完成了此操作)

  • 确保开头的“ @”是该行的最后一行,并确保结尾的“ @”是其行的第一件事。开盘后或闭盘前在其各自的线上没有空格或任何东西。顺便说一句,我在生产脚本中将选项2与`{0}`和`-f`一起使用,它们每天发送数千封电子邮件(非常适合将其注入格式正确的HTML电子邮件正文中!)。效果很好! (2认同)