如何使用IF条件?

时间:2015-12-17 09:09:34

标签: email powershell if-statement

我的要求是,只要应用程序池被回收,就需要向一组人发送一封电子邮件。脚本将从事件查看器中搜索应用程序池事件ID,并在发现任何事件时发送电子邮件。如果找到了事件ID,它将在D:\ temp中创建一个日志文件,并将该日志文件发送给收件人。

问题是,当没有事件发生时,脚本正在发送带有空日志文件的电子邮件作为附件。我不想发送空文件,脚本应该在事件发生时发送 ONLY 。如果我们使用if条件,但不确定如何在我的脚本中使用它,则可以解决此问题。

以下是我以前运行的脚本。目前它在事件发生时发送日志而不会发生。

$date = Get-Date -Format "MM-dd-yyyy HH-mm-ss"

$starttime = (Get-Date).AddMinutes(-5)

Get-WinEvent -ComputerName computer1 -Filterhashtable @{
    LogName='system';
    StartTime=$StartTime;
    ID=3201,5079,2262,2263,5070,5074,5075,5076,5077,5078,5080,5081,5093,5117,5186
  } |
  select machinename,timecreated,id,message |
  Format-Table machinename,timecreated,id,message -AutoSize |
  Out-String -Width 6096 |
  Out-File "D:\Logs\PS\$date.txt" -NoClobber

Send-MailMessage -To user1@test.com `
  -Subject "Application Pool Recycled in Computer1" `
  -Body "Application Pool has Recycled in Computer1" `
  -SmtpServer smtp.com `
  -From Apppool_Monitoring@test.com `
  -Attachments "D:\Logs\PS\$date.txt"

2 个答案:

答案 0 :(得分:2)

在创建输出和发送邮件之前,检查您是否确实收到了一个事件:

$evt = Get-WinEvent -ComputerName computer1 -Filterhashtable @{...}
if ($evt) {
  $evt | Format-Table ... |
    Out-String -Width 6096 |
    Out-File "D:\Logs\PS\$date.txt" -NoClobber

  Send-MailMessage ...
}

如果您希望内联消息而不是附件,请将事件字符串放在变量中并将其放在消息正文中:

if ($evt) {
  $msg = $evt | Format-Table ... | Out-String -Width 6096

  Send-MailMessage ... -Body "Application Pool has Recycled in Computer1`n$msg" ...
}

答案 1 :(得分:1)

读取日志文件的内容..如果日志文件包含数据,则发送电子邮件,否则不执行任何操作。

if(Get-Content -Path "D:\Logs\PS\$date.txt")
{
  #send email.......
}