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

PowerShell循环读取CSV特定列值并生成邮件主题问题

PowerShell循环CSV生成对应邮件主题问题解决

问题场景

我有一个包含两列的CSV文件,列名分别为Item和Email,需求是读取每行第一列(Item)的值,并向对应行的Email列地址发送邮件。当前编写的PowerShell代码在生成邮件主题时出现问题:要么输出所有Item值的集合,要么输出列名,而我期望的是每行对应生成Report - [Item值] - [日期]格式的主题。

示例CSV

ItemEmail
A300bob@example.com
B600loco@example.net

现有代码

$check_date = Get-Date -Format "MM-dd-yyyy"
$csv = Import-Csv C:\stores_TEST.csv
ForEach($line in $csv)
{
    $ColumnName = $csv[0].PSObject.Properties.Name[0]
    $MailSubject = "Report - "+$csv.$ColumnName+" - "+$check_date
}

问题原因

代码里有两个关键错误:

  1. 循环中引用了整个$csv集合而非当前循环的$line对象,导致$csv.$ColumnName返回所有行的Item值集合,不是当前行的单个值。
  2. 没必要通过$csv[0].PSObject.Properties.Name[0]获取列名,你已经明确知道第一列是Item,直接引用即可;就算要动态获取,也应该基于当前$line对象。

修正后的代码

$check_date = Get-Date -Format "MM-dd-yyyy"
$csv = Import-Csv C:\stores_TEST.csv

ForEach($line in $csv)
{
    # 直接取当前行的Item值生成主题
    $MailSubject = "Report - $($line.Item) - $check_date"
    # 这里可以添加发送邮件的逻辑,比如:
    # Send-MailMessage -To $line.Email -Subject $MailSubject -Body "邮件内容" -From "sender@example.com" -SmtpServer "smtp.example.com"
}

补充说明

  • 用$line.Item精准获取当前行的Item值,保证每行生成对应主题。
  • 用PowerShell字符串插值($())嵌入变量,比字符串拼接更简洁易读。
  • 如果需要动态适配第一列(比如列名可能变化),可以改成:
$check_date = Get-Date -Format "MM-dd-yyyy"
$csv = Import-Csv C:\stores_TEST.csv
$firstColumnName = $csv[0].PSObject.Properties.Name[0]

ForEach($line in $csv)
{
    $MailSubject = "Report - $($line.$firstColumnName) - $check_date"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 04:45:44