我的要求是,只要应用程序池被回收,就需要向一组人发送一封电子邮件。脚本将从事件查看器中搜索应用程序池事件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"
答案 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.......
}