Skip to content

Commit 2b45412

Browse files
committed
Exception inserted for PowerShell v4 (Task is created first, repetition is set afterwards)
1 parent f032ed7 commit 2b45412

2 files changed

Lines changed: 23 additions & 14 deletions

File tree

DSCResources/MSFT_xScheduledTask/MSFT_xScheduledTask.psm1

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -735,7 +735,7 @@ function Set-TargetResource
735735
}
736736

737737
# To overcome the issue of not being able to set the task repetition for tasks with a schedule type other than Once
738-
if ($RepeatInterval.TimeOfDay -gt (New-TimeSpan -Seconds 0))
738+
if ($RepeatInterval.TimeOfDay -gt (New-TimeSpan -Seconds 0) -and $PSVersionTable.PSVersion.Major -gt 4)
739739
{
740740
if ($RepetitionDuration.TimeOfDay -le $RepeatInterval.TimeOfDay)
741741
{
@@ -747,17 +747,8 @@ function Set-TargetResource
747747

748748
$tempTrigger = New-ScheduledTaskTrigger -Once -At 6:6:6 -RepetitionInterval $RepeatInterval.TimeOfDay -RepetitionDuration $RepetitionDuration.TimeOfDay
749749
Write-Verbose -Message 'Copying values from temporary trigger to property Repetition of $trigger.Repetition'
750-
try {
751-
$trigger.CimInstanceProperties['Repetition'].Value = $tempTrigger.Repetition
752-
}
753-
catch {
754-
try {
755-
$trigger.Repetition = $tempTrigger.Repetition
756-
}
757-
catch {
758-
throw $PSItem
759-
}
760-
}
750+
751+
$trigger.Repetition = $tempTrigger.Repetition
761752
}
762753

763754
if ($currentValues.Ensure -eq "Present")
@@ -769,6 +760,24 @@ function Set-TargetResource
769760
Write-Verbose -Message ('Creating new scheduled task' -f $TaskName)
770761

771762
$scheduledTask = New-ScheduledTask -Action $action -Trigger $trigger -Settings $setting
763+
764+
if ($RepeatInterval.TimeOfDay -gt (New-TimeSpan -Seconds 0) -and $PSVersionTable.PSVersion.Major -eq 4)
765+
{
766+
if ($RepetitionDuration.TimeOfDay -le $RepeatInterval.TimeOfDay)
767+
{
768+
$exceptionObject = New-Object System.ArgumentException -ArgumentList `
769+
('Repetition interval is set to {0} but repetition duration is {1}' -f $RepeatInterval.TimeOfDay, $RepetitionDuration.TimeOfDay),`
770+
'RepetitionDuration'
771+
throw $exceptionObject
772+
}
773+
774+
$tempTrigger = New-ScheduledTaskTrigger -Once -At 6:6:6 -RepetitionInterval $RepeatInterval.TimeOfDay -RepetitionDuration $RepetitionDuration.TimeOfDay
775+
$tempTask = New-ScheduledTask -Trigger $temptrigger -Action $action
776+
Write-Verbose -Message 'Copying values from temporary trigger to property Repetition of $trigger.Repetition'
777+
778+
$scheduledTask.Triggers[0].Repetition = $tempTask.Triggers[0].Repetition
779+
}
780+
772781
if (-not [string]::IsNullOrWhiteSpace($Description))
773782
{
774783
$scheduledTask.Description = $Description

Examples/Sample_xScheduledTask.ps1

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ Configuration Sample_xScheduledTask
4949
Hidden = $true
5050
}
5151

52-
xScheduledTask xScheduledTaskOnceAdd
52+
xScheduledTask xScheduledTaskLogonAdd
5353
{
5454
TaskName = "Test task Logon"
5555
TaskPath = "\MyTasks"
@@ -59,7 +59,7 @@ Configuration Sample_xScheduledTask
5959
RepetitionDuration = [datetime]::Today.AddHours(8)
6060
}
6161

62-
xScheduledTask xScheduledTaskOnceAdd
62+
xScheduledTask xScheduledTaskStartupAdd
6363
{
6464
TaskName = "Test task Startup"
6565
TaskPath = "\MyTasks"

0 commit comments

Comments
 (0)