Problemas ao enviar e-mails remotamente usando o script Powershell - Server 2012 R2

0

Estamos com problemas ao usar o comando Invoke-Command no Powershell para acionar manualmente uma tarefa agendada remota em outro sistema.

Aqui está a situação: Um servidor XXX tem uma tarefa agendada, que executa um script Powershell. Dentro desse script, em algum momento, ele aciona essa linha de código: Invoke-Command -Computer "SLMTL-WSUS01.XXX.inc" -ScriptBlock {schtasks /run /tn "Windows Update - Email Reporting"} . A tarefa planejada chamada simplesmente chama outro script Powershell que obtém conteúdo de um arquivo HTML e o envia por email.

O problema está aqui: Quando a tarefa agendada é chamada por meio do comando Invoke-Command , o script Powershell da tarefa é executado, mas nenhum email é enviado. Se eu executar a tarefa manualmente, ela funcionará bem e o email será enviado. Ambas as tarefas agendadas estão sendo executadas como SYSTEM, se isso for importante.

O motivo pelo qual estamos fazendo isso remotamente é porque não queremos permitir que vários servidores enviem e-mails internamente, e queremos restringi-los a um único.

Alguém sabe por que isso está acontecendo?

Obrigado antecipadamente!

EDIT: Aqui está o script formatado corretamente:

    $Content = Get-Content "\slmtl-wsus01.XXX.inc\Update_Reports\*.html"
$messageParameters = @{                         
                Subject = "Windows Update report - $((Get-Date).ToShortDateString())"                         
                Body = $Content | Out-String
                from = "[email protected]"                   
                To = "[email protected]"                     
                SmtpServer = "smtp.XXX.com"                          
            }                         
            Send-MailMessage @messageParameters -BodyAsHtml 
    
por Alex Pilon 02.06.2017 / 22:11

2 respostas

0

Eu descobri o problema, enquanto tentava descobrir usando o método de Cory (que por algum motivo, produzia zero arquivo de log).

No meu script original, depois de executar Invoke-Command -Computer "SLMTL-WSUS01.XXX.inc" -ScriptBlock {schtasks /run /tn "Windows Update - Email Reporting"} , eu tinha o seguinte comando: Move-Item "\slmtl-wsus01.XXX.inc\Update_Reports\*.html" "\slmtl-wsus01.XXX.inc\Update_Reports\ARCHIVE" Na minha cabeça, o comando Invoke-Command ..... esperaria que o script remoto real terminasse, antes de prosseguir com o script Move-Item ... mas isso não aconteceu. Então, enquanto meu roteiro principal estava mudando o conteúdo da pasta, o script remoto estava tentando obter o dito conteúdo, que não existia mais, portanto, não enviando nenhum email.

Mais uma vez, minhas habilidades de script são apenas frustradas pela minha incompreensão, e um dia foi desperdiçado com isso: P

    
por 05.06.2017 / 23:58
0

Você deve agrupar seu comando em um try / catch para registrar erros.

try {
    Send-MailMessage ..... -ErrorAction Stop
} 
catch {
    AddContent $Error[0].Exception.Message -Path "C:\Log.txt"
}

A Parada ErrorAction permitirá que você capture qualquer erro que não seja de finalização.

    
por 05.06.2017 / 20:43