Назад | Перейти на главную страницу

Разрешить сценарию Powershell, выполняемому на сервере Exchange, отправлять почту - лучшая практика?

У меня есть один сервер Exchange 2010 с несколькими ролями, и мне нужно выполнять сценарий Powershell по ежемесячному расписанию.

И я действительно хотел бы отправить отчет по электронной почте на почтовый ящик какой-нибудь местной компании по окончании задания.

Я создал учетную запись службы с необходимыми разрешениями и написал сценарий Powershell, который отлично справляется при запуске в качестве учетной записи службы, за исключением части отчета по электронной почте.

Мне кажется, что добавление IP-адреса моего сервера Exchange к разрешенному анонимно соединителю приема не подходит, может быть, есть какой-то лучший способ сделать это?

Любое мнение очень ценится!

ОБНОВИТЬ:

Что касается почтовой части скрипта, обычно я использую объект .NET Net.Mail.MailMessage, например:

$SmtpServer = "exchangeserver.corp.company.com"
$Msg = New-Object Net.Mail.MailMessage
$Smtp = New-Object Net.Mail.SmtpClient($SmtpServer)
$Msg.From = "svc_exchangeservice@company.com"
$Msg.ReplyTo = "alerts@company.com"
$Msg.To.Add("alerts@company.com")
$Msg.Subject = "Monthly script execution report"
$Msg.Body = "Everything's ok, some statistics etc."
$Smtp.Send($Msg)

Когда я использую этот код, сервер Exchange отвечает сообщением «Служба недоступна». Для меня это имеет смысл, так как не настроены соединители получения. Стандарт Send-MailMessage Команда Powershell дает тот же результат, поэтому проблема не в коде, на самом деле она отлично работает на серверах, отличных от Exchange.

В настоящее время у меня есть три соединителя получения:

Так что я ищу красивый и безопасный способ заставить его работать, заранее спасибо!

Решение довольно простое, имея пароль для ExchangeServiceAccount как переменную SecureString $ ExchangeServicePassword:

# Mail server
$SmtpServer = "mail.company.com"
# .NET object MailMessage
$Msg = New-Object Net.Mail.MailMessage
# .NET object SMTP server and SMTP authentication parameters
$Smtp = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$Smtp.Credentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "ExchangeServiceAccount", $ExchangeServicePassword
$Smtp.EnableSsl = $true
# Email structure
$Msg.From = "exchangeserviceaccount@company.com"
$Msg.ReplyTo = "alerts@company.com"
$Msg.To.Add("alerts@company.com")
$Msg.Subject = "Subject"
$Msg.Body = "Some text"
$Msg.SubjectEncoding = [System.Text.Encoding]::UTF8
$Msg.BodyEncoding = [System.Text.Encoding]::UTF8
# Send email
$Smtp.Send($Msg)