У меня есть много сайтов для мониторинга их состояния вверх/вниз, возможных ошибок, пинга и других вещей, которые мне удалось получить со сценарием. Моя идея такова: этот скрипт будет запускаться с планировщиком задач, получать результаты и отправлять нам (из публикаций SQA) электронное письмо. Итак, мне удалось создать сценарий с успехом, он получает все, что мне нужно, и генерирует html-файл на диске C :. Моя проблема в том, что после получения результата функция, отправляющая электронное письмо, не отправляет электронное письмо. Я не получаю сообщений об ошибках, отладка в порядке, SMTP и все конфигурации верны. Но он не отправит электронное письмо с прикрепленным файлом html!Скрипт Powershell для мониторинга состояния и отправки результатов электронной почты
Код это:
$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" порт, который использует наш SMTP-сервер.
Необходимо объяснить, что «не отправляет». Во-первых, вы не вызываете 'send_email', что является препятствием для отправки электронной почты. Любые сообщения об ошибках? Кроме того, есть продукты (некоторые бесплатные, некоторые не бесплатные), которые выполняют мониторинг сайта. Почему бы не использовать один из них вместо того, чтобы кататься самостоятельно? – alroc
Вы пытались использовать существующий Send-MailMessage? – Jimbo
Он просто не отправит электронное письмо, он выполнит первую часть скрипта и похоже, что он не выполнит часть «отправки по электронной почте». О «send_email» я исправил, отсутствовала часть скрипта. Дело в том, что моя компания не использует другие программные продукты, и они не будут платить за лицензию на это программное обеспечение. Кроме того, мой босс попросил меня написать эту книгу, и я использую ее как способ продолжить изучение powershell. – InLoveWithPs1