7

Powershell v3 附带了所有这些新的作业调度 cmdlet。它们看起来很棒,但我在创建特定触发器时遇到了麻烦。我需要每天运行一项工作,每小时重复一次,持续特定的时间间隔。

使用 Task-Scheduler UI 很简单,但我找不到 New-JobTrigger cmdlet 的方法。

如果我使用 Daily 参数集,我没有 Repetition 选项:

New-JobTrigger [-Daily] -At <DateTime> [-DaysInterval <Int32> ] [-RandomDelay <TimeSpan> ] [ <CommonParameters>]

如果我使用“Once”参数集,则无法使用“Daily”选项

New-JobTrigger [-Once] -At <DateTime> [-RandomDelay <TimeSpan> ] [-RepetitionDuration <TimeSpan> ] [-RepetitionInterval <TimeSpan> ] [ <CommonParameters>]

我需要但显然不起作用的是两者之间的混合。例如:

New-JobTrigger -Daily -At xxxx -RepetitionDuration (New-TimeSpan -Hours 5) -RepetitionInterval (New-TimeSpan -Hours 1)

是否可以?也许为同一个工作混合多个触发器?

4

8 回答 8

5

这对我有用:

注意 - 我知道最初的问题与 New-JobTrigger 有关 目的是提供一个可能的解决方案,该解决方案也可以翻译为 New-JobTrigger ,因为该问题适用于两者。

$A = New-ScheduledTaskAction -execute "powershell" -argument "-nologo -noprofile -noninteractive C:\MyScript.ps1"
$T = New-ScheduledTaskTrigger -Once -At 03:00AM 
Register-ScheduledTask -TaskName StartBasicServices_Local -Trigger $T -Action $A -description "MyScript" -User "NT AUTHORITY\SYSTEM" -RunLevel 1      
$T.RepetitionInterval = (New-TimeSpan -Minutes 5)
$T.RepetitionDuration = (New-TimeSpan -Days 1)
Set-ScheduledTask StartBasicServices_Local -Trigger $T
于 2012-11-29T20:59:38.007 回答
1

我整天都在研究这个问题,我终于有了答案。你不能。无论如何都不使用这些 cmdlet。起初我认为这可能是一种解决方法:

$Job = Register-ScheduledJob -Name "YourJobName"  {Gci};
$RepeatTrigger = New-JobTrigger -Once -At (Get-Date 10:00).ToShortTimeString()  -     RepetitionInterval (New-TimeSpan -Hours 1) -RepetitionDuration (New-TimeSpan -Hours 7);
$RepeatTrigger.Frequency = [Microsoft.PowerShell.ScheduledJob.TriggerFrequency]::Daily;
Add-JobTrigger -InputObject $Job -Trigger $RepeatTrigger

然而,它没有。使用 trace-command 看起来它会根据参数集验证属性。使用 schtasks 时也是如此:

schtasks /create /tn YourTask /tr notepad.exe /sc Hourly 

它将每小时创建一次,但它必须是一次性的任务。从外观上看,有一个用于 COM API 的 .Net 包装器,如果您是 PoSH 新手,这可能是您最好的选择。您可以在CodePlex上找到它。

于 2012-10-08T12:31:19.867 回答
1

我知道 Add-JobTrigger,但我不明白如何实现我的特定要求:每天运行一项工作,每小时重复一次,持续特定的持续时间。例如:每天上午 10 点,每隔 1 小时重复一次,直到下午 5 点。– Scarmuega 2012 年 10 月 7 日 18:14

使用 Register-ScheduledJob 创建作业。然后添加每日触发器。如果我们能做到这一点,那就太好了,但是 -Daily 在 PowerShell 4.0 中不起作用。请继续阅读,我有一个替代方案。

# Technet: http://technet.microsoft.com/en-us/library/hh849759.aspx
# To create a repeating schedule, use the Once parameter with the RepetitionDuration and RepetitionInterval parameters.
# -RepetitionInterval Repeats the job at the specified time interval. For example, if the value of this parameter is 2 hours, the job is triggered every two hours.
#  The default value, 0, does not repeat the job.
# -RepetitionDuration Repeats the job until the specified time expires. The repetition frequency is determined by the value of the RepetitionInterval parameter. 
#  For example, if the value of RepetitionInterval is 5 minutes and the value of RepetitionDuration is 2 hours, the job is triggered every five minutes for two hours.
#
$trigger = New-JobTrigger -Daily -At 10:00 -RepetitionDuration 7:00:00 -RepetitionInterval 1:00:00 -DaysofWeek 
Register-ScheduledJob -Name Test -Trigger $trigger -ScriptBlock {}

你可以组织你的工作,让它在你想要的每个小时都有一个触发器。

$trigger4am  = New-JobTrigger -Daily -At 04:10
Register-ScheduledJob -Name ArchiveProd -Trigger $trigger4am -ScriptBlock {E:\ArchiveProd.ps1}

$trigger8am  = New-JobTrigger -Daily -At 08:10
$trigger12pm = New-JobTrigger -Daily -At 12:10
$trigger6pm  = New-JobTrigger -Daily -At 18:10
Add-JobTrigger -Trigger $trigger8am  -Name ArchiveProd
Add-JobTrigger -Trigger $trigger12pm -Name ArchiveProd
Add-JobTrigger -Trigger $trigger6pm  -Name ArchiveProd

希望那是你所需要的。它适用于我的情况,尽管我更愿意添加 Daily 参数。也许有人可以为我改进这个?

于 2014-08-06T15:40:35.190 回答
1

一个迟到的答案,但我从这个问题开始,然后在这个链接 Petri.com上进行了更多搜索并找到了解决方案

$principal = New-ScheduledTaskPrincipal -UserID MyDomain\MyGMSA$ -LogonType Password -RunLevel Highest
$action = New-ScheduledTaskAction  "E:\DoSomething"
$when = New-ScheduledTaskTrigger -Daily -At "00:02" -DaysInterval 1

Register-ScheduledTask -TaskName MyNewTask–Action $action –Principal $principal -Trigger  $when

$t = Get-ScheduledTask -TaskName MyNewTask

$t.Triggers.repetition.Interval = "PT15M"    #every 15 mins
$t.Triggers.repetition.Duration = "PT7H30M" #for 7 hours 30
$t | Set-ScheduledTask
于 2016-06-27T09:28:46.033 回答
0

尝试使用Add-JobTrigger将多个作业触发器添加到计划作业。

于 2012-10-07T17:55:00.123 回答
0
clear
Import-Module TaskScheduler 

# Create a new task 
$task = New-Task 


Add-TaskAction -Task $task -Path "C:\Windows\notepad.exe"   
Add-TaskTrigger -Task $task -Daily -At "06:00" -Repeat "05:00" -For "12:00" 

# Register the task 
Register-ScheduledTask -Name "PowerShell - MyScript.ps1" -Task $task

Get-ScheduledTask PowerShell* | select -Property Name
# Remove-Task -n Power*
于 2012-10-08T10:11:05.980 回答
0

您可以创建多个触发器,如下所示:

$job = Register-ScheduledJob -Name "Test1" -FilePath "C:\temp\script.ps1"
$triggers = New-Object System.Collections.Generic.List[Microsoft.PowerShell.ScheduledJob.ScheduledJobTrigger]
$times = ("08:00", "09:00", "10:00", "11:00", "12:00", "14:00", "15:00", "16:00", "17:00", "19:00", "22:00")
foreach($t in $times){
$triggers.Add((New-JobTrigger -Daily -At $t))
}
$job.AddTriggers($triggers, $true)

或者更容易(但更慢)

$MyJob = Register-ScheduledJob -Name "MyJob" -FilePath "C:\temp\test.ps1"
$times = ("08:00", "09:00", "10:00", "11:00", "12:00", "14:00", "15:00", "16:00", "17:00", "19:00", "22:00")
foreach($t in $times){$MyJob | Add-JobTrigger -trigger (New-JobTrigger -Daily -At $t)}
于 2017-11-21T16:20:23.510 回答
0

当您使用“Register-ScheduledJob”创建计划作业时,您无法将每日执行与重复间隔配置在一起。即使您手动修改了 ScheduledJobTrigger 对象的属性“RepetitionInterval”和“RepetitionDuration”,触发器也将配置为每天执行一次或重复执行一次。我设法通过Get-ScheduledTask方法获取作业的相应任务并在那里修改触发器来配置它:

    $trigger = New-JobTrigger -Weekly -WeeksInterval 1 -At "06:00" -DaysOfWeek Monday,Tuesday,Wednesday,Thursday,Friday     
    Register-ScheduledJob -Name $cronjobName -Trigger $trigger -ScriptBlock $scriptBlock
    $task = Get-ScheduledTask -TaskName $cronjobName
    $trigger = $task.Triggers
    $trigger.Repetition.Interval = "PT10M"
    $trigger.Repetition.Duration = "PT12H"
    Set-ScheduledTask -TaskPath $task.TaskPath -TaskName $cronjobName -Trigger $trigger
于 2021-02-10T10:53:07.607 回答