Currently working with WinGet to improve application deployment lifecycle within Intune. I am looking at deploying a detection script that checks for the installed version daily, then triggers the remediation if there is an available update.
Doing something as simple as:
winget list --name 7-Zip
will return as follows:
Name Id Version Available Source
----------------------------------------------------
7-Zip 19.00 (x64) 7zip.7zip 19.00 22.01 winget
Within Powershell, is there a way we can check and compare the Available "column" to the Version "column", and return an exit 0 or exit 1?
Thanks in advance
CodePudding user response:
Why not use
winget upgrade
it will return available upgrades
like
Name Id Version Available Source
Google Chrome Google.Chrome 103.0.5060.53 104.0.5112.81 winget
Microsoft Edge Microsoft.Edge 103.0.1264.49 104.0.1293.47 winget
CodePudding user response:
If all you need to know is whether or not an upgrade is available, to be reflected in the script's exit code:
The following reports exit code 1
if an upgrade is available, and 0
otherwise, relying on an Available
column header only being present if an upgrade is available:
exit [int] (winget list --name 7-Zip | Select-String '\bVersion\s Available\b' -Quiet)
If you also want to report the installed vs. the latest available version, more work is needed:
$name = '7-Zip'
$lines = winget list --name $name
if ($lines -match '\bVersion\s Available\b') {
$verinstalled, $verAvailable = (-split $lines[-1])[-3,-2]
[pscustomobject] @{
Name = $name
InstalledVersion = $verInstalled
AvailableVersion = $verAvailable
}
exit 1
} else {
Write-Verbose -Verbose "No upgrade for $name available."
exit 0
}
The above outputs something like the following if an upgrade is available; the exit code is set as in the first command:
Name InstalledVersion AvailableVersion
---- ---------------- ----------------
7-Zip 9.0.30729.4148 9.0.30729.6161
Alternatively, if it's acceptable to blindly try to upgrade:
winget upgrade --name 7-Zip --silent
# If $LASTEXITCODE contains -1978335189, an upgrade was NOT available.