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

PowerShell脚本求助:如何在邮件正文中注入CSV员工变量

问题解决:PowerShell邮件脚本变量注入失败

错误原因分析

  1. 变量初始化时机错误:所有用户相关变量(如$Emp_First_Name、$ManagerEmail)定义在foreach循环外部,此时$user变量尚未被赋值,无法读取CSV中的员工数据。
  2. 特殊列名引用问题:CSV中的employee#列包含特殊字符#,直接用$user.employee无法正确获取值,需要用$user.'employee#'格式引用。
  3. 邮件内容未动态更新:邮件正文$Body定义在循环外,不会随每次循环的用户数据变化,导致所有邮件内容相同且无有效变量值。

修正后的PowerShell脚本

$infile = "c:\sdk\import.csv"
$userlist = Import-Csv $infile

$subject= "New Employee Account"

# 配置发件人凭据
$username = "crtusr@fake.ca"
$password = "$%t67Bgt##23$%t67Bgt##23hhgfhfghfghgfhgffgfgdhfghfggffgdgfdhgfhfgffsd"        
$sstr = ConvertTo-SecureString -String $password -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential -ArgumentList $username, $sstr

# 遍历每个用户,动态生成邮件内容并发送
foreach ($user in $userList) {
    # 读取当前用户的各项数据,注意特殊列名的引用方式
    $Emp_First_Name = $user.emp_first_name
    $Emp_Last_Name = $user.Emp_Last_Name
    $employeeNumber = $user.'employee#'
    $upn = $user.upn
    $ManagerEmail = $user.ManagerEmail

    # 动态生成邮件正文,使用当前用户的变量
    $Body = @"
Hello

The account for $Emp_First_Name $Emp_Last_Name (employee number $employeeNumber) is ready. Their user email and username is $upn.
"@

    # 发送邮件,使用当前用户的经理邮箱作为收件人
    Send-MailMessage –From crtusr@fake.ca `
                     –To $ManagerEmail `
                     –Subject $subject `
                     –Body $body `
                     -SmtpServer smtp.office365.com `
                     -Credential $cred `
                     -UseSsl `
                     -Port 587
}

关键修正点

  • 将用户变量读取和邮件正文生成逻辑移到foreach循环内部,确保每次循环都使用当前迭代的用户数据
  • 使用$user.'employee#'正确引用包含特殊字符#的列
  • 用Here-String(@"... "@)定义邮件正文,格式更清晰且避免换行问题
  • 调整变量名(如$employeeNumber)提高可读性,避免与内置名称冲突

内容的提问来源于stack exchange,提问作者lakeek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:20:31