У нас возникают проблемы при использовании команды Invoke-Command в Powershell для ручного запуска удаленной запланированной задачи в другой системе.

Вот ситуация: на сервере XXX есть запланированное задание, которое запускает скрипт Powershell. Внутри этого скрипта в какой-то момент он запускает следующую строку кода: Invoke-Command -Computer "SLMTL-WSUS01.XXX.inc "-ScriptBlock {schtasks /run /tn" Центр обновления Windows - Отчеты по электронной почте "}. Вызванная запланированная задача просто вызывает другой сценарий Powershell, который получает содержимое из файла HTML и отправляет его по электронной почте.

Проблема заключается в следующем: когда запланированная задача вызывается с помощью команды Invoke-Command , запускается сценарий Powershell задачи, но электронное письмо не отправляется. Если я запускаю задачу вручную, она работает нормально, и письмо отправляется. Обе запланированные задачи выполняются как СИСТЕМА, если это имеет значение.

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

Кто-то знает, почему это происходит?

Заранее спасибо!


РЕДАКТИРОВАТЬ: Вот правильно отформатированный скрипт:

    $Content = Get-Content "\\slmtl-wsus01.XXX.inc\Update_Reports\*.html"
$messageParameters = @{                         
                Subject = "Windows Update report - $((Get-Date).ToShortDateString())"                         
                Body = $Content | Out-String
                from = "wsusalerts@XXX.com"                   
                To = "apilon@XXX.com"                     
                SmtpServer = "smtp.XXX.com"                          
            }                         
            Send-MailMessage @messageParameters -BodyAsHtml 

2 ответа2

0

Вы должны обернуть вашу команду в try/catch для регистрации ошибок.

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

ErrorAction Stop позволит вам отлавливать любые не прекращающиеся ошибки.

0

Я выяснил проблему, пытаясь выяснить ее с помощью метода Кори (который по какой-то причине дал нулевой файл журнала).

В моем оригинальном скрипте после запуска Invoke-Command -Computer "SLMTL-WSUS01.XXX.inc" -ScriptBlock {schtasks /run /tn "Windows Update - Email Reporting"} , у меня была следующая команда: Move-Item "\\slmtl-wsus01.XXX.inc\Update_Reports\*.html" "\\slmtl-wsus01.XXX.inc\Update_Reports\ARCHIVE" В моей голове команда Invoke-Command ..... ожидала завершения самого удаленного сценария, прежде чем двигаться дальше со сценарием Move-Item ... но она этого не сделала , Поэтому, пока мой основной сценарий удалял содержимое папки, удаленный сценарий пытался получить указанное содержимое, которого больше не было, поэтому не отправлял по электронной почте.

Еще раз, мои способности сценария разрушены только моим непониманием, и день был потрачен на это:P

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .