Permitir que o script Powershell executado no servidor Exchange envie mensagens - melhor prática?

1

Eu tenho um único servidor Exchange 2010 multifuncional e a necessidade de executar um script Powershell em uma programação mensal.

Eu realmente gostaria de enviar um relatório por e-mail para a caixa de correio de algumas empresas locais até o final da tarefa.

Eu criei uma conta de serviço com as permissões necessárias e escrevi um script do Powershell que está fazendo tudo certo quando executado como conta de serviço - exceto a parte do relatório de e-mail.

Adicionar o IP do meu servidor Exchange ao conector de recebimento anônimo não me parece correto, talvez haja algum tipo de prática recomendada para isso?

Qualquer opinião é muito apreciada!

ATUALIZAÇÃO:

Quanto à parte de email do script, geralmente eu uso um objeto .NET Net.Mail.MailMessage assim:

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

Quando eu uso esse código, o servidor do Exchange responde com "Serviço indisponível". Para mim, faz sentido, pois não há conectores de recebimento configurados. O comando padrão Send-MailMessage Powershell fornece o mesmo resultado, então o problema não é com o código, na verdade funciona bem em servidores não-Exchange.

Atualmente, tenho três conectores de recebimento:

  • um para correio externo com FQDN mail.company.com aceitando conexões na porta 25
  • um para clientes internos do Exchange com o FQDN exchangeserver.corp.company.com na porta SSL padrão 587
  • e um para a lista de servidores locais que enviam email via Exchange sem autenticação com o FQDN exchangeserver.corp.company.com na porta 25 (não é uma solução perfeita e eu preferiria não adicionar o IP do meu servidor Exchange à lista)

Então, estou procurando uma maneira legal e segura de fazê-lo funcionar, obrigado antecipadamente!

    
por Arseny V. 01.04.2015 / 10:45

1 resposta

0

A solução é bastante simples, com uma senha para ExchangeServiceAccount como variável 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 = "[email protected]"
$Msg.ReplyTo = "[email protected]"
$Msg.To.Add("[email protected]")
$Msg.Subject = "Subject"
$Msg.Body = "Some text"
$Msg.SubjectEncoding = [System.Text.Encoding]::UTF8
$Msg.BodyEncoding = [System.Text.Encoding]::UTF8
# Send email
$Smtp.Send($Msg)
    
por 27.12.2016 / 15:41