PowerShell中如何按SQL的BusinessDays值筛选记录并发送邮件
修正PowerShell邮件通知脚本:仅针对指定BusinessDays值的记录发送邮件
问题根源
你的脚本错误地固定使用$data.Rows[0].BusinessDays作为判断条件,导致所有记录都遵循第一条记录的业务天数结果发送邮件,无法实现按单条记录的BusinessDays值筛选发送的需求。
修正方案
核心是遍历每条查询记录,逐个判断其BusinessDays值,仅对符合条件的记录执行邮件发送逻辑。以下是修正后的代码示例:
# 假设你已通过数据库查询获取到包含目标记录的$data数据集 foreach ($row in $data.Rows) { # 获取当前记录的BusinessDays数值 $currentBusinessDays = $row.BusinessDays # 根据需求设置判断条件: # - 仅发送已逾期(正值):if ($currentBusinessDays -gt 0) # - 仅发送未逾期(负值):if ($currentBusinessDays -lt 0) # - 发送所有非零记录:if ($currentBusinessDays -ne 0) if ($currentBusinessDays -gt 0 -or $currentBusinessDays -lt 0) { # 构建邮件参数,使用当前记录的字段填充内容 $mailSettings = @{ To = "recipient@example.com" From = "sender@example.com" Subject = "业务天数通知:$($row.RecordName)" Body = @" 记录ID:$($row.ID) 关联事项:$($row.Details) 业务天数:$currentBusinessDays "@ SmtpServer = "smtp.yourserver.com" # 可按需添加其他参数:Port, Credential, UseSsl等 } # 执行邮件发送 Send-MailMessage @mailSettings } }
关键修改说明
- 用
foreach ($row in $data.Rows)遍历所有查询结果,确保每条记录都被单独处理 - 从当前循环的
$row对象中获取BusinessDays,保证判断的是本条记录的实际数值 - 按需调整
if条件:根据你需要发送的是正值、负值还是非零记录,修改判断逻辑即可
内容的提问来源于stack exchange,提问作者David Megnin
相关产品推荐
相关产品推荐

