Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Email 如何使用IF条件?_Email_Powershell_If Statement - Fatal编程技术网

Email 如何使用IF条件?

Email 如何使用IF条件?,email,powershell,if-statement,Email,Powershell,If Statement,我的要求是,每当应用程序池回收时,脚本需要发送一封电子邮件给一组人。脚本将从事件查看器中搜索应用程序池事件ID,并在找到任何事件时发送电子邮件。如果找到事件ID,它将在D:\temp中创建一个日志文件,并将该日志文件发送给收件人 问题是,当没有事件发生时,脚本正在发送一封带有空日志文件作为附件的电子邮件。我不想发送空文件,脚本应仅在事件发生时发送。如果我们使用if条件,这可以解决,但不确定如何在我的脚本中使用它 下面是我用来运行的脚本。当前,它在事件发生和未发生时发送日志 $date = Get

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

问题是,当没有事件发生时,脚本正在发送一封带有空日志文件作为附件的电子邮件。我不想发送空文件,脚本应仅在事件发生时发送。如果我们使用
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"

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

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

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

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

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

$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" ...
}

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

$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" ...
}

谢谢你,基兰。我已经试过这个了,效果很好。它正在读取文件的内容,如果没有任何内容,则不会发送电子邮件。如果有一些内容,那就是发送电子邮件。谢谢你,基兰。我已经试过这个了,效果很好。它正在读取文件的内容,如果没有任何内容,则不会发送电子邮件。如果有一些内容,那么它就是在发送电子邮件。@Kiran&Ansgar,有什么办法吗。我们可以在邮件正文中发布输出而不是作为附件发送吗?谢谢Ansgar,它正在工作。我只是做了些小小的改变。我使用了“应用程序池已在Computer1
n$msg中回收”而不是“应用程序池已在Computer1
n
n$msg中回收”。使用
n`n$msg,我没有在电子邮件正文中获得输出。@Kiran&Ansgar,有什么办法吗。我们可以在邮件正文中发布输出而不是作为附件发送吗?谢谢Ansgar,它正在工作。我只是做了些小小的改变。我使用了“应用程序池已在Computer1
n$msg中回收”而不是“应用程序池已在Computer1
n
n$msg中回收”。使用
n`n$msg,我没有在电子邮件正文中获得输出。