Skip to content

Commit 8a893d6

Browse files
committed
Check if changed
1 parent ddac9b5 commit 8a893d6

File tree

1 file changed

+83
-25
lines changed

1 file changed

+83
-25
lines changed

Sources/Winget-AutoUpdate/WAU-Policies.ps1

Lines changed: 83 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)