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

PowerShell调用Send-MailMessage发邮件时附件空值报错解决方案

解决方案

完全不需要写多分支if枚举所有附件组合,只需要在传入-Attachments参数前,先对附件路径数组做过滤即可。

具体实现

  • 先把所有可能用到的附件路径变量统一放到一个数组里,不用提前判断每个变量是否为空
  • 过滤掉数组里的$null、空字符串、空白内容,还可以加一层文件存在性校验,避免路径写错、文件被删除导致的发送报错
  • 简单校验过滤后的有效附件数量满足「至少1个」的要求后,直接把过滤后的数组传给Send-MailMessage的-Attachments参数即可

参考代码

# 收集所有候选附件并过滤无效项
$validAttachments = @(
    $UsersResultFileName,
    $NumbersTableFilename,
    # 要加第3、第4个附件直接往这里追加变量就行,不用改其他逻辑
    # $ThirdAttachment,
    # $FourthAttachment
) | Where-Object {
    # 同时过滤空值和不存在的文件路径
    -not [string]::IsNullOrWhiteSpace($_) -and (Test-Path $_ -PathType Leaf)
}

# 校验有效附件数量符合最低要求
if ($validAttachments.Count -lt 1) {
    throw "未找到任何可发送的有效附件,终止流程"
}

# 执行发送
Send-MailMessage -to $EmailTo -Body $Body -Subject "$TodayDate Report" -Attachments $validAttachments -From 'r-@doman.com' -SmtpServer 'server' -port '25' -BodyAsHtml -ErrorAction Stop

方案优点

  • 代码简洁,没有冗余的分支判断
  • 扩展性强,后续增减附件只需要修改候选附件列表,不需要调整判断逻辑
  • 比单纯判断空值更健壮,能同时拦截路径无效类的报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:45:31