我需要安排一项工作在每月 25 日运行。如果 25 日是周末,我需要将工作安排在 25 日之前的最后一个星期五。Windows 任务计划程序没有此类任务的选项。有人能告诉我该怎么做吗?
答案1
Poisonbit 的回答基本正确。如果 Windows 任务调度程序内置的调度功能无法提供您需要的特定调度类型,则您需要自己解决这些限制。他的建议是从任务调度程序将按照简单的每日计划运行的脚本中执行您的作业。但该脚本足够智能,只会在适当的日期执行“真正的”作业。我冒昧地提供了一个您可以使用的基于 PowerShell 的示例。
$today = Get-Date
$d = $today.Day
$wd = $today.DayOfWeek
if ( ($d -eq 25 -and $wd -ne "Saturday" -and $wd -ne "Sunday") -or (($d -eq 23 -or $d -eq 24) -and $wd -eq "Friday") )
{
"time to execute my job"
}
它所做的只是检查当前日期。如果是 25 号而不是星期六/星期日,或者如果是星期五并且是 23 号或 24 号,它将打印“执行我的作业的时间”消息,您可以用实际执行作业的命令替换该消息。
**感谢 Paul,更新了更好的逻辑*
答案2
评估此类条件的包装器。
如果您了解 shell 脚本,则可以使用 gnu date 来完成。
如果您了解 Perl,请尝试 Time::Piece(自 Perl 5.009 起位于核心中)。
然后从 cron.daily 调用包装器,计算日期对于机器来说是一项轻松的日常任务。
答案3
瑞恩·博尔格 (Ryan Bolger) 已获得周五的资格......
但是,如果 25 号是周一到周四,您仍然希望在 25 号运行该程序,因此请将其条件更改为
if (($day -eq 25) -or ($weekday -eq "Friday" -and $day -ge 23 -and $day -le 25))
注意:我从未编写过 PowerShell 脚本,我只是根据 Ryan 提供的代码猜测语法。