Отправлено письмо в зависимости от времени отправки предыдущего письма - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть скрипт, который проверяет, работает ли сайт в сети, и отправляет письмо, если он не работает.Сценарий настроен с запланированным заданием, которое выполняется каждые 30 минут.

Проблема заключается в следующем:

Если сайт не работает в выходные или вечер (или в день, когда я не отслеживаю почтовый ящик), письма продолжают отправляться.

Мне было интересно, какой метод я мог бы использовать, чтобы отправлять почту только в том случае, если в последний раз почта была отправлена ​​3 часа назад?

Исходя из этого, я могу отправлять почту только один раз каждые 3 часа.

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

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Вместо реестра, я бы использовал простой файл конфигурации, хранящийся в ProgramData (или AppData, если вам нужна индивидуальная конфигурация)

Это делает процесс загрузки / сохранения параметров и добавления новых оченьлегко.Кроме того, если вам нужно сохранить журналы и / или другие данные, вы можете просто поместить их в ту же папку.

$ConfigFullPath = "$env:APPDATA\My Monitoring solution\config.json"

# This create the config file if none is present. 
if (-not (Test-Path  $ConfigFullPath))  {
    New-Item -ItemType File -Path $ConfigFullPath -Value ([PSCustomObject]@{'LastEmailSent' = [datetime]::MinValue}| ConvertTo-Json) -Force
}


$ConfigFileParams = ConvertFrom-Json -InputObject (get-content "$env:APPDATA\My Monitoring solution\config.json" -raw)

$SendEmail = ([Datetime]::UtcNow - ([DateTime]$ConfigFileParams.LastEmailSent)).TotalHours -ge 3


if ($SendEmail) {

    try {
        # Send-MailMessage  -ErrorAction Stop
        # Once email is sent, we update the config
        $ConfigFileParams.LastEmailSent = [DateTime]::UtcNow
        $ConfigFileParams | ConvertTo-Json | Out-File $ConfigFullPath
    }
    Catch {
        #Manage what to do in case of failure
    }

}

При этом, вы, безусловно, можете использовать реестр, чтобы сделать то же самое.Для удобства и простоты использования я настоятельно рекомендую более простой подход на основе файлов json.

0 голосов
/ 08 февраля 2019

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

(currentHour-hourFirstSent)%3==0 && currentMinute<30

Вы вводите имяфайла yyyy-mm-dd, и если этот файл существует, вы считываете с него начальный час, если не создаете его, сохраняете в нем начальный час.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...