PowerShell脚本优化:仅当判定结果为True时发送邮件告警
解决PowerShell仅在判定为True时发送邮件的问题
你只需要给邮件发送逻辑加上条件判断,就能实现仅当判定结果为True时触发告警。同时可以优化原脚本里重复的文件遍历操作,提升执行效率,修改后的完整脚本如下:
# 一次性获取目录文件信息,避免重复遍历磁盘 $infraFiles = Get-ChildItem D:\Infra\ -Recurse -File $infraDirItems = Get-ChildItem D:\Infra\ # 生成需要附加的统计文件 $infraFiles.Count > c:\temp\result.txt $infraDirItems | Select-Object name, lastwritetime, creationTime > c:\temp\file_date_time.txt Get-Date > c:\temp\server_time.txt # 判定条件:目录下项目数量是否大于10,将结果存入变量 $shouldSendEmail = ($infraDirItems.Count -gt 10) $attachments = @( "c:\temp\result.txt" "c:\temp\file_date_time.txt" "c:\temp\server_time.txt" ) $mailArgs = @{ From = "" To = "" Subject = "" Body = "" Attachments = $attachments SmtpServer = "" Port = 25 UseSSL = $true } # 仅当判定结果为True时执行邮件发送 if ($shouldSendEmail) { Send-MailMessage @mailArgs }
关键修改说明:
- 合并重复的
Get-ChildItem调用,一次获取目录信息后复用,减少不必要的磁盘IO操作 - 将判定条件的结果存入
$shouldSendEmail变量,方便后续条件判断使用 - 用
if ($shouldSendEmail)包裹邮件发送命令,只有当判定结果为$true时才触发邮件告警
内容的提问来源于stack exchange,提问作者Saraanan Ponnurangam
相关产品推荐
相关产品推荐

