我有一个脚本,用于检查网站是否在线,并在网站关闭时发送邮件。 该脚本配置有计划任务,该任务每30分钟运行一次。
问题如下:
如果该站点在周末或晚上(或我不监视邮箱的一天)关闭,则邮件将继续发送。
我想知道,如果上次发送邮件的时间是3小时之前,我可以使用哪种方法仅发送邮件?
基于这种方式,我每3小时只能发送一次邮件。
我研究了注册表项的使用,但想知道这是否是正确的方法。
答案 0 :(得分:4)
我会使用一个简单的配置文件而不是注册表来存储在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文件的简单方法。
答案 1 :(得分:0)
我认为最好的选择是将开始时间写在磁盘上保存的文件中,并且每次运行脚本以测试是否
(currentHour-hourFirstSent)%3==0 && currentMinute<30
您放置了文件yyyy-mm-dd
的名称,如果该文件存在,则从文件中读取开始时间,如果没有,则创建它并保存其中的开始时间。