我有一个监控脚本,任务调度程序每5分钟执行一次。如果脚本确定存在问题,则会引发警报条件并发送通知电子邮件。然后脚本终止。一切都很好。
我想定义一些"安静时间",在此期间,监控仍按计划进行,但通知被抑制。这几个小时将越过午夜边界。
我可以用这样的东西来做:
$quietHoursStart = "22:00"
$quietHoursEnd = "06:00"
$timeNow = Get-Date
if ( $timeNow -lt (Get-Date $quietHoursStart ) -and
$timeNow -gt (Get-Date $quietHoursEnd ) ) {
Send-NotificationEmail
}
这很好,但如果我重新定义安静时间范围,使其不超过午夜边界(例如00:00->06:00(,那么通知将始终失败,因为if
条件永远不可能为真。
如果可以添加额外的测试,看看范围是否超过午夜,然后进行两次单独的检查,看看当前时间是否"安静",但我觉得应该有一个更优雅的解决方案。
安静时间开始/结束的值实际上是从XML配置文件中提取的,但为了清晰起见,上面的示例使用了简单的定义。
编辑:澄清;该脚本必须每5分钟运行一次,而不考虑静默时间,因为它会记录所发现问题的日志。改变时间表不会达到这个目的。
添加$quietHoursStart
和$quietHoursEnd
之间的比较,以检查给定的间隔是否跨越午夜。
$quietHoursStart = "22:00"
$quietHoursEnd = "06:00"
$timeNow = Get-Date
$TimeOfDay = $timeNow.TimeOfDay
$IsQuietHours = if ( $quietHoursStart -le $quietHoursEnd ) {
$TimeOfDay -ge $quietHoursStart -and $TimeOfDay -lt $quietHoursEnd
} else {
$TimeOfDay -ge $quietHoursStart -or $TimeOfDay -lt $quietHoursEnd
}
if ( !$IsQuietHours ) {
Send-NotificationEmail
}
Alain O'Dea的链接确实很好地满足了您的需求,但从脚本的角度来看,我认为更好的方法(从脚本角度来看,他与调度任务的链接可能更好(是定义开始时间,然后定义持续时间。所以你想让它从晚上10点开始一直持续到早上6点?这是一个8小时的持续时间。此外,我会测试它是否在你的安静时间,然后用-Not
(我使用别名!
(将其反转
$quietHoursStart = "22:00"
$quietHoursDuration = 8
$timeNow = Get-Date
if (! ($timeNow -gt (Get-Date $quietHoursStart ) -and $timeNow -lt (Get-Date $quietHoursStart ).AddHours($quietHoursDuration)) ) {
Send-NotificationEmail
}