Рейтинг:0

Powershell Отправить MailMessage

флаг in

Я создал скрипт для проверки связи с серверами, который запускается из планировщика заданий. Если сервер не пингуется, он должен отправить мне электронное письмо. Он также отправляет электронное письмо один раз в день, что он жив.

Проблема в том, что большинство электронных писем отправляются и приходят, как и ожидалось, но иногда электронное письмо не отправляется. Ошибка не выдается. Судя по анализу потока почты, электронная почта никогда не доходит до нашего сервера Office365 Exchange.

Я читал различные решения, в том числе вставку командлетов сна и использование блока try/catch. До сих пор я находил только сообщения с проблемами, в которых Send-MailMessage дает сбой постоянно, но не сообщения с проблемами, в которых он не работает беспорядочно.

Я записываю результаты, но что касается попытки/пойма, то Send-MailMessage всегда завершается успешно.Мои файлы журналов всегда показывают успешную отправку, а не сбой.

Мои навыки работы с PowerShell все еще находятся на начальной стадии, весь код для расшифровки идентификатора пользователя и пароля был скопирован у других, более знающих людей.

Код, который считывает учетные данные, расшифровывает учетные данные, создает и отправляет электронную почту:

(emailOperator — это гибридная учетная запись пользователя Office365 с лицензией E1)

В 100% случаев, если я вручную запускаю сценарий из PowerShell ISE, электронное письмо отправляется. В 100% случаев, если я запускаю задание вручную из планировщика заданий, электронное письмо отправляется (я делал это десятки раз, а не сотни).

$EmailRecipient = '[email protected]'
$emailFrom = '[email protected]'
$ReportingHost = 'Отчетный хост: ' + $env:имя_компьютера
$CredentialLocation = "c:\MyServer\SendEmailUsingOffice365CredentialFolder\"

#Чтение ключа AES
$AES_AdminDomain_KeyFilePath = $CredentialLocation + "AESKEY.txt" <# ключ шифрования домена администратора AES #>
$AESKey = Get-Content $AES_AdminDomain_KeyFilePath

#Чтение и расшифровка пароля с помощью AESKey
$ExportedPasswordFilePath = $CredentialLocation + "Password.txt" <# Password #> 
$pwdTxt = Get-Content $ExportedPasswordFilePath
$securePwd = $pwdTxt | ConvertTo-SecureString -Ключ $AESKey

#Прочитайте и расшифруйте имя пользователя с помощью AESKey
$ExportedUserNameFilePath = $CredentialLocation + "User.txt" <# Имя пользователя #>
$UserSecureString = ConvertTo-SecureString -key $AESKey -String (Get-Content $ExportedUserNameFilePath)
$Pointer = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($UserSecureString)
$Sender = [Runtime.InteropServices.Marshal]::PtrToStringAuto($Pointer)

# сгенерировать учетные данные
$EmailCredentials = New-Object System.Management.Automation.PSCredential -ArgumentList $Sender, $securePwd

# Создайте письмо
$EmailSubject = $env:ComputerName + "активен и проверяет конечные точки на " + (get-date -Format HH:mm)
$EmailBody = "- конец-"

Старт-Сон -с 1
Пытаться
    {
    Send-MailMessage -SmtpServer smtp.office365.com -Port 587 -UseSSL -From $EmailFrom -To $EmailRecipient -Subject $EmailSubject -Body $EmailBody -Credential $EmailCredentials
    }
    Ловить
    {
    "ошибка, я жив, письмо НЕ отправлено, x" + $_.Exception.Message + "x" + $(Get-Date -format 'MM/dd/yyyy,HH:mm:ss') | Out-File -Filepath $Log_File -NoClobber -append 
    }
"eMail, я жив, электронное письмо отправлено, y" + $_.Exception.Message + "y" + $(Get-Date -format 'MM/dd/yyyy,HH:mm:ss') | Out-File -Filepath $Log_File -NoClobber -append

Есть ли способ отправить электронное письмо и заставить PowerShell отслеживать его ход?

Спасибо

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.