Отправка электронного письма, если файл в папке старше 1 минуты, иначе не отправляйте ничего в Powershell - PullRequest
0 голосов
/ 25 сентября 2019

Вот мой код, который отправляет электронное письмо и создает хорошую тему, если файл существует, однако он отправляет электронное письмо непрерывно, даже если файлов нет.Я хочу использовать что-то вроде «если file.exist затем smtp send».

$smtpServer = "test.local"
$smtpTo = "test@test.com";
$messageSubject = "Urgent check....!"
$Message = New-Object System.Net.Mail.MailMessage $smtpFrom, $smtpTo
$Message.Subject = $messageSubject
$content = Get-ChildItem '\\test\test1\test2\*.txt' |
           Where-Object {$_.LastWriteTime -lt (Get-Date).AddMinutes(-1)}
$Message.IsBodyHtml = $true
$style = "<style>BODY{font-family: Arial; font-size: 10pt;}"
$style = $style + "</style>"
$Message.Body = Get-ChildItem '\\test\test1\test2\*.txt' |
                Select-Object -Property "Name", "LastWriteTime" |
                Where-Object {$_.LastWriteTime -lt (Get-Date).AddMinutes(-1)} |
                ConvertTo-Html -Head $style
$smtp = New-Object Net.Mail.SmtpClient ($smtpServer)
$smtp.Send($message)

1 Ответ

0 голосов
/ 25 сентября 2019

Проверьте, является ли $content пустым, и отправляйте почту, только если это не так.

...
$content = Get-ChildItem '\\test\test1\test2\*.txt' |
           Where-Object {$_.LastWriteTime -lt (Get-Date).AddMinutes(-1)}

if ($content) {
    $Message = New-Object Net.Mail.MailMessage $smtpFrom, $smtpTo
    ...
    $Message.Body = $content |
                    Select-Object "Name", "LastWriteTime" |
                    ConvertTo-Html -Head $style

    $smtp = New-Object Net.Mail.SmtpClient $smtpServer
    ...
}

В более поздних версиях PowerShell вы можете использовать командлет Send-MailMessage вместо суетывокруг с MailMessage и SmtpClient объектами.Общий подход был бы тем же самым.

...
$content = Get-ChildItem '\\test\test1\test2\*.txt' |
           Where-Object {$_.LastWriteTime -lt (Get-Date).AddMinutes(-1)}

if ($content) {
    $body = $content |
            Select-Object "Name", "LastWriteTime" |
            ConvertTo-Html -Head $style

    Send-MailMessage -To $smtpTo ... -Body $body -BodyAsHtml -SmtpServer $smtpServer ...
}
...