【问题标题】:How add variable to email body如何将变量添加到电子邮件正文
【发布时间】:2020-12-21 22:34:58
【问题描述】:

我的变量有问题。我想把它放在电子邮件的内容中,不幸的是所有尝试都以失败告终。在 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>
"@

【问题讨论】:

  • 它对我来说很好,你确定你为变量分配了正确的值吗?
  • 是的,只有这个变量在后面的循环中定义,所以你不要“更新”电子邮件内容。

标签: powershell powershell-2.0 powershell-3.0


【解决方案1】:

是的,只有这个变量在后面的循环中定义,所以你不需要“更新”电子邮件内容。 – markiewicz36 5 分钟前

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

【讨论】:

  • 非常感谢。我将 $emailBody 值放入循环中,现在它可以正常工作了!
【解决方案2】:

因为你想在赋值给$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 #####。如果将来有人用双引号替换单引号,您可以避免出现问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    相关资源
    最近更新 更多