我有一个监视脚本,由任务调度程序每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分钟运行一次,无论安静时间如何,因为它记录了发现问题的日志。改变时间表将无法实现这一目标。
答案 0 :(得分:3)
在$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
}
答案 1 :(得分:0)
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
}