diff --git a/Sources/Winget-AutoUpdate/Winget-Upgrade.ps1 b/Sources/Winget-AutoUpdate/Winget-Upgrade.ps1 index 287b043..05b8d5e 100644 --- a/Sources/Winget-AutoUpdate/Winget-Upgrade.ps1 +++ b/Sources/Winget-AutoUpdate/Winget-Upgrade.ps1 @@ -349,14 +349,17 @@ if (Test-Network) { } #if app is in "excluded list", skip it elseif ($toSkip.AppID -contains $app.Id) { - if ($toSkip.PinnedVersion) { - $regexPattern = $toSkip.PinnedVersion -replace '\.', '\.' -replace '\*', '.*' - $regexPattern = "^$regexPattern$" + $matchingToSkip = $toSkip | Where-Object { $_.AppID -contains $app.Id } + if ($matchingToSkip.PinnedVersion) { + $regexPattern = $matchingToSkip.PinnedVersion -replace '\.', '\.' -replace '\*', '.*' + $regexPattern = "^$regexPattern$".Trim() if ($app.AvailableVersion -match $regexPattern) { Update-App $app } } - Write-ToLog "$($app.Name) : Skipped upgrade because it is in the excluded app list" "Gray" + else { + Write-ToLog "$($app.Name) : Skipped upgrade because it is in the excluded app list" "Gray" + } } #if app with wildcard is in "excluded list", skip it elseif ($toSkip.AppID | Where-Object { $app.Id -like $_ }) { diff --git a/Sources/Winget-AutoUpdate/functions/Get-ExcludedApps.ps1 b/Sources/Winget-AutoUpdate/functions/Get-ExcludedApps.ps1 index ecaec07..05bae6b 100644 --- a/Sources/Winget-AutoUpdate/functions/Get-ExcludedApps.ps1 +++ b/Sources/Winget-AutoUpdate/functions/Get-ExcludedApps.ps1 @@ -1,9 +1,9 @@ -#Function to get the Block List apps +# Function to get the Block List apps function Get-ExcludedApps { $AppIDs = @() - #blacklist in registry + # Blacklist in registry if ($GPOList) { Write-ToLog "-> Excluded apps from GPO is activated" if (Test-Path "HKLM:\SOFTWARE\Policies\Romanitho\Winget-AutoUpdate\BlackList") { @@ -17,7 +17,7 @@ function Get-ExcludedApps { Write-ToLog "-> Successfully loaded excluded apps list." } } - #blacklist pulled from URI + # Blacklist pulled from URI elseif ($URIList) { $RegPath = "$WAU_GPORoot"; $RegValueName = 'WAU_URIList'; @@ -41,7 +41,7 @@ function Get-ExcludedApps { } } } - #blacklist pulled from local file + # Blacklist pulled from local file elseif (Test-Path "$WorkingDir\excluded_apps.txt") { $AppIDs = (Get-Content -Path "$WorkingDir\excluded_apps.txt").Trim() | ForEach-Object { [PSCustomObject]@{ @@ -51,7 +51,7 @@ function Get-ExcludedApps { } Write-ToLog "-> Successfully loaded local excluded apps list." } - #blacklist pulled from default file + # Blacklist pulled from default file elseif (Test-Path "$WorkingDir\config\default_excluded_apps.txt") { $AppIDs = (Get-Content -Path "$WorkingDir\config\default_excluded_apps.txt").Trim() | ForEach-Object { [PSCustomObject]@{ @@ -64,11 +64,12 @@ function Get-ExcludedApps { $WAUExcludePinnedApps = $WAUConfig.WAU_ExcludePinnedApps if ($WAUExcludePinnedApps -eq 1) { - #blacklist pinned winget apps - $pinnedAppsResult = & winget pin list | Where-Object { $_ -notlike " *" } | Out-String + # Blacklist pinned winget apps + $pinnedAppsResult = & $Winget pin list | Where-Object { $_ -notlike " *" } | Out-String if (!($pinnedAppsResult -match "-----")) { Write-ToLog "-> No pinned winget apps found, nothing to exclude." - } else { + } + else { # Split winget output to lines $lines = $pinnedAppsResult.Split([Environment]::NewLine) | Where-Object { $_ } @@ -90,31 +91,42 @@ function Get-ExcludedApps { $versionStart = $lines[$fl].IndexOf($index[2]) $containsGating = $lines | Where-Object { $_.Trim() -like "*Gating*" } if ($containsGating) { - $pinnedAppVersionStart = $lines[$fl].IndexOf($index[5]) + $pinnedAppVersionStart = $lines[$fl].IndexOf($index[4]) } # Now cycle through the real package lines and split accordingly For ($i = $fl + 2; $i -lt $lines.Length; $i++) { - $line = $lines[$i] -replace "[\u2026]|", " " # Fix "..." in long names + $line = $lines[$i] -replace "[\u2026]", " " # Fix ellipsis in long names if (-Not ($line.StartsWith("-----"))) { # (Alphanumeric | Literal . | Alphanumeric) - the only unique thing in common for lines with applications if ($line -match "\w\.\w") { $softwareId = $line.Substring($idStart, $versionStart - $idStart).TrimEnd() + if ($line -like "*Gating*") { - $pinnedVersion = $line.Substring($pinnedAppVersionStart).TrimStart() # Get the pinned version - $AdditionalLogText = "with version $pinnedVersion" - } else { + # Ensure start index is within bounds + if ($pinnedAppVersionStart -lt $line.Length) { + $pinnedVersion = $line.Substring($pinnedAppVersionStart).TrimStart() # Get the pinned version + $pinnedVersion = $pinnedVersion -replace "^Gating\s+", "" + $AdditionalLogText = "with version $pinnedVersion" + } + else { + Write-ToLog "Cannot extract pinned app version; invalid start index" + $pinnedVersion = $null + } + } + else { $pinnedVersion = $null $AdditionalLogText = $null } + if ($null -ne $softwareId) { # Add the extracted software ID and version to the list $AppIDs += [PSCustomObject]@{ AppID = $softwareId PinnedVersion = $pinnedVersion } - + Write-ToLog "Excluding $softwareId from WAU updates, as this app is pinned in winget $AdditionalLogText" } }