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

PowerShell脚本问题:如何仅发送符合阈值的证书到期信息至邮件正文

解决邮件仅发送筛选后证书到期信息的问题

嗨,我来帮你搞定这个问题!你的脚本现在会把CSV里所有内容都塞进邮件,核心原因是你没有保存筛选后的结果,反而用了原始的$cert变量生成邮件正文。另外还有个小语法问题需要修正,咱们一步步来:

问题出在哪?

你写的筛选语句$cert | Select-Object ... | Where-Object {...}只是执行了筛选操作,但没有把结果存到变量里,之后发邮件时用($cert | Out-String),自然会把所有原始CSV内容放进去。另外,访问对象属性时,$_"Certificate Expiration Date"少了个点号,正确写法应该是$_."Certificate Expiration Date"。

修正后的完整脚本

# 获取当前日期
$now = Get-Date
# 导入CSV文件
$cert = Import-Csv C:\Users\userID\Desktop\Certificate_CSV2.csv
# 设置到期阈值(70天)
$threshold = 70
# 计算到期截止日期(当前日期往后推70天)
$deadline = (Get-Date).AddDays($threshold)

# 筛选出70天内到期的证书,并存入变量保存结果
$expiringCerts = $cert | 
    Select-Object "Service Name", "Certificate Expiration Date" | 
    Where-Object { $_."Certificate Expiration Date" -as [datetime] -le $deadline }

# 发送邮件,使用筛选后的结果生成正文
Send-MailMessage -To "SentTo@email.com" `
    -Subject "test message 8" `
    -From "SentFrom@email.com" `  # 建议发件人地址和收件人区分开,避免被邮件系统拦截
    -Body ($expiringCerts | Out-String) `
    -SmtpServer pobox.email.com

关键改动说明

  • 保存筛选结果:把筛选后的证书信息存到$expiringCerts变量里,确保后续所有操作都只针对符合条件的内容
  • 修正属性访问语法:$_."Certificate Expiration Date"加上点号,这是PowerShell访问对象属性的标准写法
  • 用筛选变量生成正文:邮件正文改用$expiringCerts | Out-String,这样就只会发送你需要的、70天内到期的服务名称和证书日期信息

如果筛选后没有符合条件的证书,邮件正文会是空的,你后续也可以加个判断逻辑,比如如果$expiringCerts为空就不发邮件,或者发送“暂无即将到期证书”的提示,不过先搞定核心需求再说~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:32:48