如果文件夹中的文件早于 1 分钟,则发送电子邮件,否则不要在 Powershell 中发送任何内容

Sending an email if a File in a folder is older than 1 Minute else do not send anything in Powershell

这是我的代码,如果文件存在,它会发送一封电子邮件并创建一个好的主题,但是即使没有文件,它也会连续发送电子邮件。我想使用类似 "if file.exist then 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)

检查 $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 cmdlet 而不是摸索着 MailMessageSmtpClient 对象。不过,一般方法是相同的。

...
$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 ...
}