如何向电子邮件正文添加变量

How add variable to email body

我对变量有疑问。我想把它放在邮件的内容中,不幸的是所有尝试都以失败告终。在 Powershell 这是我的第一个脚本,我有编程经验。我想在电子邮件的内容中添加 $PasswordTillExpired 变量:

$emailBody = @"
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
</head>
<body>
<b><p>Your password will expire soon! $PasswordTillExpired</p></b>
<p>Please change password at xxx password reset'</a> or contact Helpdesk.</p>
<p><br>More information about changing your password and instructions can be found</p></b>
<p>Greetings,</p>
<p>Helpdesk IT</p>
</body>
</html>
"@

由于要在给$emailBody赋值后赋值,可以直接替换为:

$emailBody =  @'
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
</head>
<body>
<b><p>Your password will expire soon! $PasswordTillExpired</p></b>
<p>Please change password at xxx password reset'</a> or contact Helpdesk.</p>
<p><br>More information about changing your password and instructions can be found</p></b>
<p>Greetings,</p>
<p>Helpdesk IT</p>
</body>
</html>
'@

# Set the variable here
$PasswordTillExpired = "SOMETHING SOMETHING"

$personalizedEmailBody = $emailBody.replace('$PasswordTillExpired',$PasswordTillExpired)

注意,我把@" (...) "@改成@' (...) '@,这样字面值就保存到变量中了。有关详细信息,请参阅 About Quoting Rules

我还建议使用不同的字符串,例如 ####### PasswordTillExpired #####。如果将来有人将单引号替换为双引号,您可以避免出现问题。

Yes, only this variable is defined later in the loop, so you don't 'update' the email content. – markiewicz36 5 mins ago

PowerShell 中的变量扩展工作方式不同。为了在字符串中扩展变量,必须在分配字符串之前定义变量。

为了说明,这行不通。

$Body = " Hello, $user !"
$user = "FoxDeploy"

Write-Host $Body
" Hello, !"

虽然这将:

$user = "FoxDeploy"
$Body = " Hello, $user !"

Write-Host $Body
" Hello, FoxDeploy!"

您只需将变量赋值向下移动到脚本中 $PasswordTillExpired 具有有意义值的区域。

保持当前的方法

如果您真的想使用现在的方法,即在脚本顶部分配电子邮件正文,您可以使用 -Replace 换出令牌。

因此,您可以将 $PasswordTillExpired 更改为 %PasswordTillExpiredToken 之类的内容,然后在需要时创建电子邮件正文的新实例,如下所示:

$thisEmailBody = $emailBody -replace "%PasswordTillExpiredToken", $PasswordTillExpired

这将为您提供一个新的 $thisEmailBody 为该用户定制的。