@@ -44,35 +44,93 @@ if ($WAUConfig.WAU_RunGPOManagement -eq 1) {
4444 $WAUTask = Get-ScheduledTask - TaskName ' Winget-AutoUpdate' - ErrorAction SilentlyContinue
4545
4646 # Update 'Winget-AutoUpdate' scheduled task settings
47- $taskTriggers = @ ()
48- if ($WAUConfig.WAU_UpdatesAtLogon -eq 1 ) {
49- $tasktriggers += New-ScheduledTaskTrigger - AtLogOn
50- }
51- if ($WAUConfig.WAU_UpdatesInterval -eq " Daily" ) {
52- $tasktriggers += New-ScheduledTaskTrigger - Daily - At $WAUConfig.WAU_UpdatesAtTime
53- }
54- elseif ($WAUConfig.WAU_UpdatesInterval -eq " BiDaily" ) {
55- $tasktriggers += New-ScheduledTaskTrigger - Daily - At $WAUConfig.WAU_UpdatesAtTime - DaysInterval 2
56- }
57- elseif ($WAUConfig.WAU_UpdatesInterval -eq " Weekly" ) {
58- $tasktriggers += New-ScheduledTaskTrigger - Weekly - At $WAUConfig.WAU_UpdatesAtTime - DaysOfWeek 2
47+ $currentTriggers = $WAUTask.Triggers
48+ $configChanged = $false
49+
50+ # Check if LogOn trigger setting has changed
51+ $hasLogonTrigger = $currentTriggers | Where-Object { $_.TriggerType -eq " LogOn" }
52+ if (($WAUConfig.WAU_UpdatesAtLogon -eq 1 -and -not $hasLogonTrigger ) -or
53+ ($WAUConfig.WAU_UpdatesAtLogon -ne 1 -and $hasLogonTrigger )) {
54+ $configChanged = $true
5955 }
60- elseif ($WAUConfig.WAU_UpdatesInterval -eq " BiWeekly" ) {
61- $tasktriggers += New-ScheduledTaskTrigger - Weekly - At $WAUConfig.WAU_UpdatesAtTime - DaysOfWeek 2 - WeeksInterval 2
56+
57+ # Check if schedule type has changed
58+ $currentIntervalType = " None"
59+ foreach ($trigger in $currentTriggers ) {
60+ if ($trigger.TriggerType -eq " Daily" -and $trigger.DaysInterval -eq 1 ) {
61+ $currentIntervalType = " Daily"
62+ break
63+ }
64+ elseif ($trigger.TriggerType -eq " Daily" -and $trigger.DaysInterval -eq 2 ) {
65+ $currentIntervalType = " BiDaily"
66+ break
67+ }
68+ elseif ($trigger.TriggerType -eq " Weekly" -and $trigger.WeeksInterval -eq 1 ) {
69+ $currentIntervalType = " Weekly"
70+ break
71+ }
72+ elseif ($trigger.TriggerType -eq " Weekly" -and $trigger.WeeksInterval -eq 2 ) {
73+ $currentIntervalType = " BiWeekly"
74+ break
75+ }
76+ elseif ($trigger.TriggerType -eq " Weekly" -and $trigger.WeeksInterval -eq 4 ) {
77+ $currentIntervalType = " Monthly"
78+ break
79+ }
80+ elseif ($trigger.TriggerType -eq " Once" -and [DateTime ]::Parse($trigger.StartBoundary ) -lt (Get-Date )) {
81+ $currentIntervalType = " Never"
82+ break
83+ }
6284 }
63- elseif ($WAUConfig.WAU_UpdatesInterval -eq " Monthly" ) {
64- $tasktriggers += New-ScheduledTaskTrigger - Weekly - At $WAUConfig.WAU_UpdatesAtTime - DaysOfWeek 2 - WeeksInterval 4
85+
86+ if ($currentIntervalType -ne $WAUConfig.WAU_UpdatesInterval ) {
87+ $configChanged = $true
6588 }
66- # If trigger(s) set
67- if ($taskTriggers ) {
68- # Edit scheduled task
69- Set-ScheduledTask - TaskPath $WAUTask.TaskPath - TaskName $WAUTask.TaskName - Trigger $taskTriggers | Out-Null
89+
90+ # Check if schedule time has changed
91+ if ($currentIntervalType -ne " None" -and $currentIntervalType -ne " Never" ) {
92+ $timeTrigger = $currentTriggers | Where-Object { $_.TriggerType -ne " LogOn" } | Select-Object - First 1
93+ if ($timeTrigger ) {
94+ $currentTime = [DateTime ]::Parse($timeTrigger.StartBoundary ).ToString(" HH:mm:ss" )
95+ if ($currentTime -ne $WAUConfig.WAU_UpdatesAtTime ) {
96+ $configChanged = $true
97+ }
98+ }
7099 }
71- # If not, remove trigger(s)
72- else {
73- # Remove by setting past due date
74- $tasktriggers = New-ScheduledTaskTrigger - Once - At " 01/01/1970"
75- Set-ScheduledTask - TaskPath $WAUTask.TaskPath - TaskName $WAUTask.TaskName - Trigger $taskTriggers | Out-Null
100+
101+ # Only update triggers if configuration has changed
102+ if ($configChanged ) {
103+ $taskTriggers = @ ()
104+ if ($WAUConfig.WAU_UpdatesAtLogon -eq 1 ) {
105+ $tasktriggers += New-ScheduledTaskTrigger - AtLogOn
106+ }
107+ if ($WAUConfig.WAU_UpdatesInterval -eq " Daily" ) {
108+ $tasktriggers += New-ScheduledTaskTrigger - Daily - At $WAUConfig.WAU_UpdatesAtTime
109+ }
110+ elseif ($WAUConfig.WAU_UpdatesInterval -eq " BiDaily" ) {
111+ $tasktriggers += New-ScheduledTaskTrigger - Daily - At $WAUConfig.WAU_UpdatesAtTime - DaysInterval 2
112+ }
113+ elseif ($WAUConfig.WAU_UpdatesInterval -eq " Weekly" ) {
114+ $tasktriggers += New-ScheduledTaskTrigger - Weekly - At $WAUConfig.WAU_UpdatesAtTime - DaysOfWeek 2
115+ }
116+ elseif ($WAUConfig.WAU_UpdatesInterval -eq " BiWeekly" ) {
117+ $tasktriggers += New-ScheduledTaskTrigger - Weekly - At $WAUConfig.WAU_UpdatesAtTime - DaysOfWeek 2 - WeeksInterval 2
118+ }
119+ elseif ($WAUConfig.WAU_UpdatesInterval -eq " Monthly" ) {
120+ $tasktriggers += New-ScheduledTaskTrigger - Weekly - At $WAUConfig.WAU_UpdatesAtTime - DaysOfWeek 2 - WeeksInterval 4
121+ }
122+
123+ # If trigger(s) set
124+ if ($taskTriggers ) {
125+ # Edit scheduled task
126+ Set-ScheduledTask - TaskPath $WAUTask.TaskPath - TaskName $WAUTask.TaskName - Trigger $taskTriggers | Out-Null
127+ }
128+ # If not, remove trigger(s)
129+ else {
130+ # Remove by setting past due date
131+ $tasktriggers = New-ScheduledTaskTrigger - Once - At " 01/01/1970"
132+ Set-ScheduledTask - TaskPath $WAUTask.TaskPath - TaskName $WAUTask.TaskName - Trigger $tasktriggers | Out-Null
133+ }
76134 }
77135
78136 # Log latest applied config
0 commit comments