diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d251dac..0fdc3848 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ ## Unreleased - Fix master branch AppVeyor badge link URL in README.MD - See [Issue #140](https://github.com/PowerShell/xComputerManagement/issues/140). +- Fix deletion of scheduled task with unknown or empty task trigger. + Get-TargetResource returns an empty ScheduleType string if the task + trigger is empty or unknown - See [Issue + #137](https://github.com/PowerShell/xComputerManagement/issues/137). ## 4.0.0.0 diff --git a/Modules/xComputerManagement/DSCResources/MSFT_xScheduledTask/MSFT_xScheduledTask.psm1 b/Modules/xComputerManagement/DSCResources/MSFT_xScheduledTask/MSFT_xScheduledTask.psm1 index c731e18a..717b7487 100644 --- a/Modules/xComputerManagement/DSCResources/MSFT_xScheduledTask/MSFT_xScheduledTask.psm1 +++ b/Modules/xComputerManagement/DSCResources/MSFT_xScheduledTask/MSFT_xScheduledTask.psm1 @@ -438,9 +438,8 @@ function Get-TargetResource default { - New-InvalidArgumentException ` - -Message ($script:localizedData.TriggerTypeError -f $trigger.CimClass.CimClassName) ` - -ArgumentName CimClassName + $returnScheduleType = '' + Write-Verbose -Message ($script:localizedData.TriggerTypeUnknown -f $trigger.CimClass.CimClassName) } } diff --git a/Modules/xComputerManagement/DSCResources/MSFT_xScheduledTask/en-US/MSFT_xScheduledTask.strings.psd1 b/Modules/xComputerManagement/DSCResources/MSFT_xScheduledTask/en-US/MSFT_xScheduledTask.strings.psd1 index f80f00ed..6858ab69 100644 --- a/Modules/xComputerManagement/DSCResources/MSFT_xScheduledTask/en-US/MSFT_xScheduledTask.strings.psd1 +++ b/Modules/xComputerManagement/DSCResources/MSFT_xScheduledTask/en-US/MSFT_xScheduledTask.strings.psd1 @@ -2,7 +2,7 @@ ConvertFrom-StringData @' GetScheduledTaskMessage = Getting scheduled task '{0}' in '{1}'. TaskNotFoundMessage = Task '{0}' not found in '{1}'. Returning an empty task with Ensure = "Absent". TaskFoundMessage = Task '{0}' found in '{1}'. Retrieving settings, first action, first trigger and repetition settings. - TriggerTypeError = Trigger type '{0}' not recognized. + TriggerTypeUnknown = Trigger type '{0}' not recognized. DetectedScheduleTypeMessage = Detected schedule type '{0}' for first trigger. SetScheduledTaskMessage = Setting scheduled task '{0}' in '{1}'. DisablingExistingScheduledTask = Disabling existing scheduled task '{0}' in '{1}'. diff --git a/Tests/Unit/MSFT_xScheduledTask.Tests.ps1 b/Tests/Unit/MSFT_xScheduledTask.Tests.ps1 index 5c24831e..2950a9ba 100644 --- a/Tests/Unit/MSFT_xScheduledTask.Tests.ps1 +++ b/Tests/Unit/MSFT_xScheduledTask.Tests.ps1 @@ -1494,6 +1494,52 @@ try Test-TargetResource @testParameters | Should -Be $true } } + + Context 'When a built-in scheduled task exists and is enabled, but it should be disabled and the trigger type is not recognized' { + $testParameters = @{ + TaskName = 'Test task' + TaskPath = '\Test\' + Enable = $false + Verbose = $True + } + + Mock -CommandName Get-ScheduledTask -MockWith { + @{ + TaskName = $testParameters.TaskName + TaskPath = $testParameters.TaskPath + Actions = [pscustomobject] @{ + Execute = 'C:\windows\system32\WindowsPowerShell\v1.0\powershell.exe' + } + Triggers = [pscustomobject] @{ + Repetition = @{ + Duration = "PT15M" + Interval = "PT15M" + } + CimClass = @{ + CimClassName = 'MSFT_TaskEventTrigger' + } + } + Settings = [pscustomobject] @{ + Enabled = $true + } + } } + + It 'Should return the correct values from Get-TargetResource' { + $result = Get-TargetResource @testParameters + $result.Enable | Should -Be $true + $result.Ensure | Should -Be 'Present' + $result.ScheduleType | Should -BeNullOrEmpty + } + + It 'Should return false from the test method' { + Test-TargetResource @testParameters | Should -Be $false + } + + It 'Should disable the scheduled task in the set method' { + Set-TargetResource @testParameters + Assert-MockCalled Register-ScheduledTask -Exactly -Times 1 + } + } } } #endregion