首页 > 解决方案 > Powershell:如何从外部 HTML 文档中填充占位符(变量)?

问题描述

Send-MailMessage我想用 Powershell 和函数发送 HTML 电子邮件。为了保持我的代码轻量级,我将 Mailbody 的 HTML 代码放在了我的 Powershell 代码之外。

挑战是,在发送电子邮件之前用 Powershell 变量替换 HTML 文件中的变量。

这里的代码不完整。我已经缩短了它以澄清问题。

正文.htm

<html>
<body>
<h1> Hello $Salutation! </h1>
</body>
</html>

我的脚本.ps1

$MailBody = Get-Content body.htm -Raw
$Salutation = "Foo Bar!"
    
$MailMessageParam = @{
            "Subject"     = "Mail from Powershell!"
            "Encoding"    = "UTF8"
            "Body"        = $MailBody
            "BodyAsHtml"  = $true
        }

Send-MailMessage @MailMessageParam

我的问题是,变量$Salutation不会被填充。变量的$MailBody行为类似于直通。知道如何解决这个问题吗?

标签: powershell

解决方案


我能想到的一种解决方案是$Salutation用占位符替换 并使用格式运算符对其进行格式化。所以将body.htm更改为

<html>
<body>
<h1> Hello {0}! </h1>
</body>
</html>

然后在 hashtable( $MailMessageParam) 集合中,

"Body" = ($MailBody -f $Salutation)

或者,您可以只使用ExpandString返回一个字符串的方法,其中所有变量和表达式替换都已完成。

"Body" = $ExecutionContext.InvokeCommand.ExpandString($MailBody)

推荐阅读