Powershell-Skript zum Überwachen des Status und Senden von E-Mail-Ergebnissen

Ich habe viele Websites, auf denen ich ihren Up / Down-Status, mögliche Fehler, Ping und die anderen Dinge, die ich mit einem Skript bekommen habe, überwachen kann. Meine Idee ist die folgende: Dieses Skript wird mit dem Taskplaner ausgeführt, die Ergebnisse abrufen und uns (aus den SQA-Publikationen) eine E-Mail senden. Ich habe es also geschafft, das Skript mit Erfolg zu erstellen. Er bekommt alles, was ich brauche, und generiert eine HTML-Datei auf dem Laufwerk C :. Mein Problem ist, dass, nachdem ich das Ergebnis erhalten habe, die Funktion, die die E-Mail sendet, die E-Mail nicht sendet. Ich erhalte keine Fehlermeldungen, das Debugging ist in Ordnung, SMTP und alle Konfigurationen sind korrekt. Die E-Mail mit der angehängten HTML-Datei wird jedoch nicht gesendet!

Der Code lautet wie folgt:

$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 = "[email protected]"
$EmailTo = "[email protected]"
$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) "587" ist der Port, den unser SMTP-Server verwendet.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage