diff --git a/Winget-AutoUpdate/functions/Get-WingetCmd.ps1 b/Winget-AutoUpdate/functions/Get-WingetCmd.ps1 new file mode 100644 index 0000000..4281e02 --- /dev/null +++ b/Winget-AutoUpdate/functions/Get-WingetCmd.ps1 @@ -0,0 +1,34 @@ +Function Get-WingetCmd { + #Get WinGet Path (if admin context) + $ResolveWingetPath = Resolve-Path "C:\Program Files\WindowsApps\Microsoft.DesktopAppInstaller_*_x64__8wekyb3d8bbwe" + if ($ResolveWingetPath){ + #If multiple version, pick last one + $WingetPath = $ResolveWingetPath[-1].Path + } + + #Get Winget Location in User context + $WingetCmd = Get-Command winget.exe -ErrorAction SilentlyContinue + if ($WingetCmd){ + $Script:Winget = $WingetCmd.Source + } + #Get Winget Location in System context (WinGet < 1.17) + elseif (Test-Path "$WingetPath\AppInstallerCLI.exe"){ + $Script:Winget = "$WingetPath\AppInstallerCLI.exe" + } + #Get Winget Location in System context (WinGet > 1.17) + elseif (Test-Path "$WingetPath\winget.exe"){ + $Script:Winget = "$WingetPath\winget.exe" + } + else{ + Write-Log "Winget not installed or detected !" "Red" + return $false + } + + #Run winget to list apps and accept source agrements (necessary on first run) + & $Winget list --accept-source-agreements | Out-Null + + #Log Winget installed version + $WingerVer = & $Winget --version + Write-Log "Winget Version: $WingerVer" + return $true +} \ No newline at end of file diff --git a/Winget-AutoUpdate/functions/Get-WingetOutdatedApps.ps1 b/Winget-AutoUpdate/functions/Get-WingetOutdatedApps.ps1 index ef6317a..3ab7e79 100644 --- a/Winget-AutoUpdate/functions/Get-WingetOutdatedApps.ps1 +++ b/Winget-AutoUpdate/functions/Get-WingetOutdatedApps.ps1 @@ -6,38 +6,6 @@ function Get-WingetOutdatedApps { [string]$AvailableVersion } - #Get WinGet Path (if admin context) - $ResolveWingetPath = Resolve-Path "C:\Program Files\WindowsApps\Microsoft.DesktopAppInstaller_*_x64__8wekyb3d8bbwe" - if ($ResolveWingetPath){ - #If multiple version, pick last one - $WingetPath = $ResolveWingetPath[-1].Path - } - - #Get Winget Location in User context - $WingetCmd = Get-Command winget.exe -ErrorAction SilentlyContinue - if ($WingetCmd){ - $Script:Winget = $WingetCmd.Source - } - #Get Winget Location in System context (WinGet < 1.17) - elseif (Test-Path "$WingetPath\AppInstallerCLI.exe"){ - $Script:Winget = "$WingetPath\AppInstallerCLI.exe" - } - #Get Winget Location in System context (WinGet > 1.17) - elseif (Test-Path "$WingetPath\winget.exe"){ - $Script:Winget = "$WingetPath\winget.exe" - } - else{ - Write-Log "Winget not installed !" "Red" - break - } - - #Run winget to list apps and accept source agrements (necessary on first run) - & $Winget list --accept-source-agreements | Out-Null - - #Log Winget installed version - $WingerVer = & $Winget --version - Write-Log "Winget Version: $WingerVer" - #Get list of available upgrades on winget format Write-Log "Checking application updates on Winget Repository..." "yellow" $upgradeResult = & $Winget upgrade | Out-String diff --git a/Winget-AutoUpdate/winget-upgrade.ps1 b/Winget-AutoUpdate/winget-upgrade.ps1 index b2d5bbf..039a9c5 100644 --- a/Winget-AutoUpdate/winget-upgrade.ps1 +++ b/Winget-AutoUpdate/winget-upgrade.ps1 @@ -16,88 +16,91 @@ Get-NotifLocale #Check network connectivity if (Test-Network){ - #Get Current Version - Get-WAUCurrentVersion - #Check if WAU update feature is enabled - Get-WAUUpdateStatus - #If yes then check WAU update - if ($true -eq $WAUautoupdate){ - #Get Available Version - Get-WAUAvailableVersion - #Compare - if ([version]$WAUAvailableVersion -gt [version]$WAUCurrentVersion){ - #If new version is available, update it - Write-Log "WAU Available version: $WAUAvailableVersion" "Yellow" - Update-WAU + $TestWinget = Get-WingetCmd + if ($TestWinget){ + #Get Current Version + Get-WAUCurrentVersion + #Check if WAU update feature is enabled + Get-WAUUpdateStatus + #If yes then check WAU update + if ($true -eq $WAUautoupdate){ + #Get Available Version + Get-WAUAvailableVersion + #Compare + if ([version]$WAUAvailableVersion -gt [version]$WAUCurrentVersion){ + #If new version is available, update it + Write-Log "WAU Available version: $WAUAvailableVersion" "Yellow" + Update-WAU + } + else{ + Write-Log "WAU is up to date." "Green" + } + } + + #Get White or Black list + Get-WAUConfig + if ($UseWhiteList){ + $toUpdate = Get-IncludedApps } else{ - Write-Log "WAU is up to date." "Green" + $toSkip = Get-ExcludedApps } - } - #Get White or Black list - Get-WAUConfig - if ($UseWhiteList){ - $toUpdate = Get-IncludedApps - } - else{ - $toSkip = Get-ExcludedApps - } + #Get outdated Winget packages + $outdated = Get-WingetOutdatedApps - #Get outdated Winget packages - $outdated = Get-WingetOutdatedApps - - #Log list of app to update - foreach ($app in $outdated){ - #List available updates - $Log = "Available update : $($app.Name). Current version : $($app.Version). Available version : $($app.AvailableVersion)." - $Log | Write-host - $Log | out-file -filepath $LogFile -Append - } - - #Count good update installations - $Script:InstallOK = 0 - - #If White List - if ($UseWhiteList){ - #For each app, notify and update + #Log list of app to update foreach ($app in $outdated){ - if (($toUpdate -contains $app.Id) -and $($app.Version) -ne "Unknown"){ - Update-App $app - } - #if current app version is unknown - elseif($($app.Version) -eq "Unknown"){ - Write-Log "$($app.Name) : Skipped upgrade because current version is 'Unknown'" "Gray" - } - #if app is in "excluded list" - else{ - Write-Log "$($app.Name) : Skipped upgrade because it is not in the included app list" "Gray" + #List available updates + $Log = "Available update : $($app.Name). Current version : $($app.Version). Available version : $($app.AvailableVersion)." + $Log | Write-host + $Log | out-file -filepath $LogFile -Append + } + + #Count good update installations + $Script:InstallOK = 0 + + #If White List + if ($UseWhiteList){ + #For each app, notify and update + foreach ($app in $outdated){ + if (($toUpdate -contains $app.Id) -and $($app.Version) -ne "Unknown"){ + Update-App $app + } + #if current app version is unknown + elseif($($app.Version) -eq "Unknown"){ + Write-Log "$($app.Name) : Skipped upgrade because current version is 'Unknown'" "Gray" + } + #if app is in "excluded list" + else{ + Write-Log "$($app.Name) : Skipped upgrade because it is not in the included app list" "Gray" + } } } - } - #If Black List - else{ - #For each app, notify and update - foreach ($app in $outdated){ - if (-not ($toSkip -contains $app.Id) -and $($app.Version) -ne "Unknown"){ - Update-App $app - } - #if current app version is unknown - elseif($($app.Version) -eq "Unknown"){ - Write-Log "$($app.Name) : Skipped upgrade because current version is 'Unknown'" "Gray" - } - #if app is in "excluded list" - else{ - Write-Log "$($app.Name) : Skipped upgrade because it is in the excluded app list" "Gray" + #If Black List + else{ + #For each app, notify and update + foreach ($app in $outdated){ + if (-not ($toSkip -contains $app.Id) -and $($app.Version) -ne "Unknown"){ + Update-App $app + } + #if current app version is unknown + elseif($($app.Version) -eq "Unknown"){ + Write-Log "$($app.Name) : Skipped upgrade because current version is 'Unknown'" "Gray" + } + #if app is in "excluded list" + else{ + Write-Log "$($app.Name) : Skipped upgrade because it is in the excluded app list" "Gray" + } } } - } - - if ($InstallOK -gt 0){ - Write-Log "$InstallOK apps updated ! No more update." "Green" - } - if ($InstallOK -eq 0){ - Write-Log "No new update." "Green" + + if ($InstallOK -gt 0){ + Write-Log "$InstallOK apps updated ! No more update." "Green" + } + if ($InstallOK -eq 0){ + Write-Log "No new update." "Green" + } } }