You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Powershell如何替换外部HTML文档中的占位符变量?

问题原因

Get-Content读取文件得到的是字面量字符串,PowerShell默认不会自动解析字符串内部的$变量标记;同时原代码的变量定义顺序错误,先读取HTML模板、后定义$Salutation变量,即使开启变量展开也无法匹配到对应值。

解决方案

方案1:直接展开模板变量(适合简单场景)

无需修改现有HTML模板,调整变量定义顺序,调用$ExecutionContext.InvokeCommand.ExpandString()方法即可自动解析模板内的所有变量标记。
修改后的脚本示例:

# 注意:必须先定义所有占位符对应的变量,再读取模板
$Salutation = "Foo Bar!"
$MailBodyTemplate = Get-Content body.htm -Raw
# 展开模板内的所有变量
$MailBody = $ExecutionContext.InvokeCommand.ExpandString($MailBodyTemplate)
    
$MailMessageParam = @{
    "Subject"     = "Mail from Powershell!"
    "Encoding"    = "UTF8"
    "Body"        = $MailBody
    "BodyAsHtml"  = $true
}

Send-MailMessage @MailMessageParam

方案2:显式替换占位符(更安全,适合复杂场景)

将模板内的占位符改为不易冲突的{{变量名}}格式,手动指定替换规则,避免模板内非变量的$内容被误解析。
修改后的body.htm示例:

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

修改后的脚本示例:

$MailBodyTemplate = Get-Content body.htm -Raw
$Salutation = "Foo Bar!"
# 逐个替换对应占位符
$MailBody = $MailBodyTemplate -replace '\{\{Salutation\}\}', $Salutation
    
$MailMessageParam = @{
    "Subject"     = "Mail from Powershell!"
    "Encoding"    = "UTF8"
    "Body"        = $MailBody
    "BodyAsHtml"  = $true
}

Send-MailMessage @MailMessageParam

内容的提问来源于stack exchange,提问作者Gill-Bates

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:27:05