NealWalters
NealWalters

Reputation: 18187

Powershell New-ScheduledTaskTrigger recurring task with -RepetitionInterval

I'm finding the errors related to ScheduledTask cmdles give extremely cryptic errors. I want to schedule a test task to run every 1 minute and repeat forever. Here's what I'm trying, but no success:

cls
#$Action = New-ScheduledTaskAction -Execute "e:\Scripts\TestClusteredTask.cmd"
$DurationTimeSpan = New-TimeSpan -Minutes 1 
$DurationTimeSpanIndefinite = ([TimeSpan]::MaxValue) 
$DurationTempTest = New-TimeSpan -Days 1000
$Trigger = New-ScheduledTaskTrigger -Daily -At "00:01" -RepetitionInterval $DurationTimeSpan -RepetitionDuration $DurationTempTest  

also tried this:

$Trigger = New-ScheduledTaskTrigger -Daily -At "00:01" -RepetitionInterval $DurationTimeSpan -RepeatIndefinitely 

Error Output:

New-ScheduledTaskTrigger : Parameter set cannot be resolved using the specified named parameters.
At C:\Users\nwalters\Documents\AddTestClusteredTask.ps1:6 char:12
+ $Trigger = New-ScheduledTaskTrigger -Daily -At "00:01" -RepetitionInterval $Dura ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [New-ScheduledTaskTrigger], ParameterBindingException
    + FullyQualifiedErrorId : AmbiguousParameterSet,New-ScheduledTaskTrigger

I'm referencing this web page for instructions. http://technet.microsoft.com/en-us/library/hh849759.aspx

Powerhsell Version 4 on Win 2012/R2

Upvotes: 9

Views: 29973

Answers (4)

Andy
Andy

Reputation: 43

may be this can help someone !!

$script="restart_Service"
$trigger=New-JobTrigger -Daily -At 3:00PM
$action=New-ScheduledTaskAction -Execute C:\temp\restart.ps1
Register-ScheduledTask -Action $action -TaskName $script -Description "to restart the service"  -RunLevel Highest -Trigger $trigger
$Task.Triggers.Repetition.Duration = "P1D" 
$Task.Triggers.Repetition.Interval = "PT30M"
$Task | Set-ScheduledTask -User "NT AUTHORITY\SYSTEM"
$Task = Get-ScheduledTask -TaskName "restart_Service"
$Task.Triggers.Repetition | fl *

Upvotes: 1

Robert R.
Robert R.

Reputation: 681

I found out that you can modify the Trigger before you link it to the task. My Script generates a Task with a Trigger at 8:00 o Clock, every day. The tasks is repeaded every 60 Minutes (1 hour) with a random delay of 30 minutes:

$Prog = $env:systemroot + "\system32\WindowsPowerShell\v1.0\powershell.exe"
$Opt = "-nologo -noninteractive -noprofile -ExecutionPolicy BYPASS -file \\mydomain.local\NETLOGON\Monitoring\monitoring.ps1"
$Action = New-ScheduledTaskAction -Execute $Prog -Argument $Opt 
$Trigger = New-ScheduledTaskTrigger -Daily -DaysInterval 1 -RandomDelay "00:30" -At "08:00"
$Trigger.Repetition = $(New-ScheduledTaskTrigger -Once -RandomDelay "00:30" -At "08:00" -RepetitionDuration "12:00" -RepetitionInterval "01:00").Repetition
$Principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
$Task = Register-ScheduledTask -Action $Action -Trigger $Trigger -Principal $Principal -TaskName "Monitor-PS1-V001" -Description "Starts Monitoring-Script" -Force

I googled around and found no nice solution. Hopefully somebody can use my "idea"

Greetings Robert

Upvotes: 18

Fabs
Fabs

Reputation: 21

I found out that you can do this in multiple steps e.g:

$ST_A = New-ScheduledTaskAction –Execute "E:\Scheduled Tasks\pause.cmd"
$ST_T = New-ScheduledTaskTrigger -Once -At 0am
Register-ScheduledTask -TaskName "Pause_with_asJob2" -Action $ST_A –Trigger $ST_T
Disable-ScheduledTask -Taskname "Pause_with_asJob2"
$ST_T = New-ScheduledTaskTrigger -Once -At 03:00 -RepetitionDuration (new-timespan -hour 15) -RepetitionInterval (new-timespan -minutes 15)
Set-ScheduledTask -TaskName "Pause_with_asJob2" -Action $ST_A –Trigger $ST_T
$ST_T = New-ScheduledTaskTrigger -Daily -At 03:00
Set-ScheduledTask -TaskName "Pause_with_asJob2" -Action $ST_A –Trigger $ST_T

Upvotes: 2

Matt
Matt

Reputation: 46710

According to tech net this is the dataset you are using

Parameter Set: Daily
New-ScheduledTaskTrigger [-Daily] -At <DateTime> [-DaysInterval <Int32> ] [-RandomDelay <TimeSpan> ] [ <CommonParameters>]

In your examples you are specifying -RepetitionInterval and -RepetitionDuration which are part of the -Once parameter set.

Parameter Set: Once
New-ScheduledTaskTrigger [-Once] -At <DateTime> [-RandomDelay <TimeSpan> ] [-RepetitionDuration <TimeSpan> ] [-RepetitionInterval <TimeSpan> ] [ <CommonParameters>]

That is why you are getting an ambiguity error. It does not know which parameter set you are using.

FullyQualifiedErrorId : AmbiguousParameterSet,New-ScheduledTaskTrigger

So you need to specify -Once if you want to use those other parameters.

Upvotes: 12

Related Questions