Powershell - 每月计划任务触发器

时间:2016-01-14 21:18:22

标签: powershell powershell-v4.0

我目前正在通过Powershell自动创建计划任务,我正在使用New-ScheduledTaskActionNew-ScheduledTaskTriggerRegister-ScheduledTask命令。现在,我有一些工作需要在以下条件下运行:

  • 每周五运行一次
  • 每个月1日运行一次
  • 每个月的第10天运行一次

虽然New-ScheduledTaskTrigger命令的technet documentation指定了DailyWeekly时间范围参数,但我看不到Monthly的{​​{1}}用于定义上面的运行时间。

在我使用Powershell的几年里,我想不出一个我可以通过标准UI界面做某事的实例,我无法使用其中一个可用命令完成。

这是不是没有在这里,或者我错过了什么?

更新#1

我偶然发现了SuperUser question这看起来很有希望,但引用PSV3而不是PSV4 - 会给它一个机会并报告回来。

1 个答案:

答案 0 :(得分:3)

正如我在原帖中所说,上面的SuperUser问题看起来很有希望,但最终没有与PSV4一起使用,帖子中给出的示例基本上是一个复制\粘贴作业,几乎没有上下文。

我意识到我可以利用我的Powershell脚本中的Schtasks.exe来处理每月聚合,并且它很容易设置,虽然有些单调乏味:

# set the trigger depending on time, span, and day
$runSpan = $task.SpanToRun;

if ($runSpan.Equals("Daily"))
{            
    $trigger = New-ScheduledTaskTrigger -Daily -At $task.TimeToRun
    Register-ScheduledTask -Action $action -Trigger $trigger -TaskName $task.TaskName -User $Username -Password $Password -Description $task.Description       
}

if ($runSpan.Equals("Weekly"))
{            
    $trigger = New-ScheduledTaskTrigger -Weekly -At $task.TimeToRun -DaysOfWeek $task.DayToRun
    Register-ScheduledTask -Action $action -Trigger $trigger -TaskName $task.TaskName -User $Username -Password $Password -Description $task.Description
}        

#  script out SchTasks magic to create the monthly tasks
if ($runSpan.Equals("Monthly"))
{
    $taskParams = @("/Create",
                "/TN", $task.TaskName, 
                "/SC", "monthly", 
                "/D", $task.DayToRun, 
                "/ST", $task.TimeToRun, 
                "/TR", $filePath, 
                "/F", #force
                "/RU", $Username,
                "/RP", $Password);

    # supply the command arguments and execute  
    #schtasks.exe $taskParams
     schtasks.exe @taskParams
}

我使用脚本类来跟踪所有任务属性($task.TimeToRun$task.DayToRun等),迭代这些属性列表,应用Powershell实现对于每日和每周任务,然后切换到SchTasks.exe进行每月跨度。

我想要注意的一点是,乍一看,我认为设置任务运行的用户上下文可以通过UP来实现争论,但事实并非如此。这指定了 Schtasks.exe在下运行的信用 - 为了设置任务的用户上下文,您必须使用RURP

除了上面的链接,这两个也非常有帮助:

http://coding.pstodulka.com/2015/08/02/programmatically-scheduling-powershell-scripts-in-task-scheduler/

https://msdn.microsoft.com/en-us/library/windows/desktop/bb736357(v=vs.85).aspx