Power shell отправляет электронную почту в цикле и записывает вывод в файл - PullRequest
0 голосов
/ 01 июня 2018
Send-MailMessage -From "test@xxx.com" -To "aaa@xxx.com","bbb@xxx.com","ccc@xxx.com","ddd@xxx.com" -SmtpServer "xx.xx.xx.xx" -Subject "Test email subject" -Body "Test email body"

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

Проблема: МояРазрушитель дает прерывистую проблему при отправке электронных писем.Я хочу просмотреть журналы, чтобы увидеть, сколько писем прошло из 100 и сколько не удалось и с каким сообщением об ошибке.

1 Ответ

0 голосов
/ 01 июня 2018

Многократный запуск потребует какой-то цикл.Цикл for кажется наиболее подходящим для каждого цикла из 100, а цикл while кажется подходящим для зацикливания каждого набора.

Поскольку вы работаетеКоманды очень быстро вы захотите какой-то параллелизм.Задания, области выполнения и рабочие процессы являются тремя наиболее распространенными формами.Работать с заданиями проще всего, но с наименьшей эффективностью.

Тогда для задержки между попытками можно использовать команду Start-Sleep.

Существует много способов записи в файл,Out-File -Append это один из способов.Try\catch может использоваться для обнаружения ошибок и вывода их в журнал.

$Iterations = 100
$Delay = 2
$StopTime = (Get-Date).AddMinutes(5)
$Command = {Send-MailMessage -From "test@xxx.com" -To "aaa@xxx.com","bbb@xxx.com","ccc@xxx.com","ddd@xxx.com" -SmtpServer "xx.xx.xx.xx" -Subject "Test email subject" -Body "Test email body"}


while ((Get-Date -le $StopTime)) {
    try {
        Remove-Job -State Completed
        for ($i = 0; $i -lt $Iterations; $i++) {
            Start-Job -ScriptBlock $command
        }
        "Jobs created at (Get-Date)" | Out-File "C:\example\log.txt" -Append
        Start-Sleep $delay
    }
    catch {
        $error[0] | Out-File "C:\example\log.txt" -Append
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...