首页 文章

用于监控状态和发送电子邮件结果的Powershell脚本

提问于
浏览
3

我有很多网站来监控他们的上/下状态,可能的错误,ping以及我通过脚本获得的其他事情 . 我的想法如下:此脚本将与任务计划程序一起运行,获取结果并向我们发送电子邮件(来自SQA出版物) . 所以,我成功地创建了脚本,他得到了我需要的所有东西并在C:驱动器中生成了一个html文件 . 我的问题是,在我得到结果后,发送电子邮件的功能不是发送电子邮件 . 我没有收到任何错误消息,调试很好,SMTP和所有配置都是正确的 . 但它不会发送附带html文件的电子邮件!

代码是这样的:

$URLListFile = "C:\URLList.txt"  
$URLList = Get-Content $URLListFile -ErrorAction SilentlyContinue 
  $Result = @() 


  Foreach($Uri in $URLList) { 
  $time = try{ 
  $request = $null 

  $result1 = Measure-Command { $request = Invoke-WebRequest -Uri $uri } 
  $result1.TotalMilliSeconds 
  }  
  catch 
  { 

   $request = $_.Exception.Response 
   $time = -1 
  }   
  $result += [PSCustomObject] @{ 
  Time = Get-Date; 
  Uri = $uri; 
  StatusCode = [int] $request.StatusCode; 
  StatusDescription = $request.StatusDescription; 
  ResponseLength = $request.RawContentLength; 
  TimeTaken =  $time;  
  } 

} 

if($result -ne $null) 
{ 
    $Outputreport = "<HTML><TITLE>Website Report Status</TITLE><BODY background-color:peachpuff><font color =""#99000"" face=""Microsoft Tai le""><H2> Website Report Status </H2></font><Table border=1 cellpadding=0 cellspacing=0><TR bgcolor=gray align=center><TD><B>URL</B></TD><TD><B> Code </B></TD><TD><B> Status </B></TD><TD><B> Duration </B></TD><TD><B> MS (Ping) </B></TD</TR>" 
    Foreach($Entry in $Result) 
    { 
        if($Entry.StatusCode -ne "200") 
        { 
           $Outputreport += "<TR bgcolor=red>" 
        } 
        else 
        { 
            $Outputreport += "<TR>" 
        } 
        $Outputreport += "<TD>$($Entry.uri)</TD><TD align=center>$($Entry.StatusCode)</TD><TD align=center>$($Entry.StatusDescription)</TD><TD align=center>$($Entry.ResponseLength)</TD><TD align=center>$($Entry.timetaken)</TD></TR>" 
    } 
    $Outputreport += "</Table></BODY></HTML>" 
} 

$Outputreport | out-file C:\URLReport.htm 
Invoke-Expression C:\URLReport.htm   


$EmailFrom = "noreply@domain.com"
$EmailTo = "destinyemail@domain.com"
$EmailSubject = "URL Report"
$emailbody = " body message "
$SMTPServer = "smtpserver.company.com"

$emailattachment = "C:\URLReport.htm"

function send_email {
$mailmessage = New-Object system.net.mail.mailmessage
$mailmessage.from = ($emailfrom)
$mailmessage.To.add($emailto)
$mailmessage.Subject = $emailsubject
$mailmessage.Body = $emailbody

$attachment = New-Object System.Net.Mail.Attachment($emailattachment, 'html')
  $mailmessage.Attachments.Add($attachment)


$mailmessage.IsBodyHTML = $true
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
$SMTPClient.Send($mailmessage)
}

EDIT4: >($ SmtpServer,587)Beeing " 587 "我们的smtp服务器使用的端口 .

1 回答

  • 8

    由于您使用的是Powershell v3,因此您应该使用 Send-MailMessage 而不是处理 System.Net .

    $URLListFile = "C:\URLList.txt"  
    $URLList = Get-Content $URLListFile -ErrorAction SilentlyContinue 
      $Result = @() 
    
    
      Foreach($Uri in $URLList) { 
      $time = try{ 
      $request = $null 
    
      $result1 = Measure-Command { $request = Invoke-WebRequest -Uri $uri } 
      $result1.TotalMilliSeconds 
      }  
      catch 
      { 
    
       $request = $_.Exception.Response 
       $time = -1 
      }   
      $result += [PSCustomObject] @{ 
      Time = Get-Date; 
      Uri = $uri; 
      StatusCode = [int] $request.StatusCode; 
      StatusDescription = $request.StatusDescription; 
      ResponseLength = $request.RawContentLength; 
      TimeTaken =  $time;  
      } 
    
    } 
    
    if($result -ne $null) 
    { 
        $Outputreport = "<HTML><TITLE>Website Report Status</TITLE><BODY background-color:peachpuff><font color =""#99000"" face=""Microsoft Tai le""><H2> Website Report Status </H2></font><Table border=1 cellpadding=0 cellspacing=0><TR bgcolor=gray align=center><TD><B>URL</B></TD><TD><B> Code </B></TD><TD><B> Status </B></TD><TD><B> Duration </B></TD><TD><B> MS (Ping) </B></TD</TR>" 
        Foreach($Entry in $Result) 
        { 
            if($Entry.StatusCode -ne "200") 
            { 
               $Outputreport += "<TR bgcolor=red>" 
            } 
            else 
            { 
                $Outputreport += "<TR>" 
            } 
            $Outputreport += "<TD>$($Entry.uri)</TD><TD align=center>$($Entry.StatusCode)</TD><TD align=center>$($Entry.StatusDescription)</TD><TD align=center>$($Entry.ResponseLength)</TD><TD align=center>$($Entry.timetaken)</TD></TR>" 
        } 
        $Outputreport += "</Table></BODY></HTML>" 
    } 
    
    $Outputreport | out-file C:\URLReport.htm 
    Invoke-Item C:\URLReport.htm   
    
    $EmailFrom = "noreply@domain.com"
    $EmailTo = "destinyemail@domain.com"
    $EmailSubject = "URL Report"
    $emailbody = " body message "
    $SMTPServer = "smtpserver.company.com"
    
    $emailattachment = "C:\URLReport.htm"
    
    Send-MailMessage -Port 587 -SmtpServer $SMTPServer -From $EmailFrom -To $EmailTo -Attachments $emailattachment -Subject $EmailSubject -Body $emailbody -Bodyashtml;
    

相关问题