如何向电子邮件正文添加变量
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
为该用户定制的。
我对变量有疑问。我想把它放在邮件的内容中,不幸的是所有尝试都以失败告终。在 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
为该用户定制的。