Powershell - 每月计划任务触发器
Powershell - Monthly Scheduled Task Trigger
我目前正在通过 Powershell 自动创建计划任务,我正在使用 New-ScheduledTaskAction
、New-ScheduledTaskTrigger
和 Register-ScheduledTask
命令。现在,我有几个工作需要运行满足以下条件:
- 运行每周五一次
- 运行每月1号一次
- 运行每月10号一次
虽然 New-ScheduledTaskTrigger
命令的 technet documentation 指定了 Daily
和 Weekly
时间跨度参数,但我没有看到 Monthly
,这对于定义上面的 运行 次至关重要。
在我使用 Powershell 的几年里,我想不出有什么实例可以让我可以通过标准 UI 接口做一些事情,那个我无法使用可用命令之一完成。
这里完全没有这个,还是我遗漏了什么?
更新 #1
我只是偶然发现了这个 SuperUser question,它看起来确实很有前途,但引用的是 PSV3 而不是 PSV4 - 打算试一试并报告回来。
正如我在原文post中所说的,上面的超级用户问题看起来很有希望,但最终不适用于PSV4,post中给出的示例基本上是copy\paste 几乎没有上下文的工作。
我意识到我可以利用我的 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
}
我正在使用 in-script class 来跟踪所有任务属性($task.TimeToRun
、$task.DayToRun
等),迭代列表那些,将 Powershell 实施应用于每日和每周任务,然后切换到 SchTasks.exe 用于每月跨度。
我想指出的一件事是,乍一看,我认为可以通过 U
和P
个参数,但事实并非如此。这指定了 Schtasks.exe 在 下运行的凭据 - 为了设置任务的用户上下文,您必须使用 RU
和 RP
。
除了上面的link,这两个也很有帮助:
https://msdn.microsoft.com/en-us/library/windows/desktop/bb736357(v=vs.85).aspx
我目前正在通过 Powershell 自动创建计划任务,我正在使用 New-ScheduledTaskAction
、New-ScheduledTaskTrigger
和 Register-ScheduledTask
命令。现在,我有几个工作需要运行满足以下条件:
- 运行每周五一次
- 运行每月1号一次
- 运行每月10号一次
虽然 New-ScheduledTaskTrigger
命令的 technet documentation 指定了 Daily
和 Weekly
时间跨度参数,但我没有看到 Monthly
,这对于定义上面的 运行 次至关重要。
在我使用 Powershell 的几年里,我想不出有什么实例可以让我可以通过标准 UI 接口做一些事情,那个我无法使用可用命令之一完成。
这里完全没有这个,还是我遗漏了什么?
更新 #1
我只是偶然发现了这个 SuperUser question,它看起来确实很有前途,但引用的是 PSV3 而不是 PSV4 - 打算试一试并报告回来。
正如我在原文post中所说的,上面的超级用户问题看起来很有希望,但最终不适用于PSV4,post中给出的示例基本上是copy\paste 几乎没有上下文的工作。
我意识到我可以利用我的 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
}
我正在使用 in-script class 来跟踪所有任务属性($task.TimeToRun
、$task.DayToRun
等),迭代列表那些,将 Powershell 实施应用于每日和每周任务,然后切换到 SchTasks.exe 用于每月跨度。
我想指出的一件事是,乍一看,我认为可以通过 U
和P
个参数,但事实并非如此。这指定了 Schtasks.exe 在 下运行的凭据 - 为了设置任务的用户上下文,您必须使用 RU
和 RP
。
除了上面的link,这两个也很有帮助:
https://msdn.microsoft.com/en-us/library/windows/desktop/bb736357(v=vs.85).aspx