Skip to content

Instantly share code, notes, and snippets.

@nouseforname
Last active September 14, 2023 19:04
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save nouseforname/a8b7ebcb9d0c05e380c7e3c81c300923 to your computer and use it in GitHub Desktop.
Save nouseforname/a8b7ebcb9d0c05e380c7e3c81c300923 to your computer and use it in GitHub Desktop.
Powershell filter winget upgrade
# add id to skip the update
$skipUpdate = @(
'Microsoft.DotNet.SDK.6',
'Microsoft.WindowsSDK'
)
# object to be used basically for view only
class Software {
[string]$Name
[string]$Id
[string]$Version
[string]$AvailableVersion
}
# get the available upgrades
$upgradeResult = winget upgrade -u
# run through the list and get the app data
$upgrades = @()
$idStart = -1
$isStartList = 0
$upgradeResult | ForEach-Object -Process {
if ($isStartList -lt 1 -and -not $_.StartsWith("Name") -or $_.StartsWith("---") -or $_.StartsWith("The following packages"))
{
return
}
if ($_.StartsWith("Name"))
{
$idStart = $_.toLower().IndexOf("id")
$isStartList = 1
return
}
if ($_.Length -lt $idStart)
{
return
}
$Software = [Software]::new()
$Software.Name = $_.Substring(0, $idStart-1)
$info = $_.Substring($idStart) -split '\s+'
$Software.Id = $info[0]
$Software.Version = $info[1]
$Software.AvailableVersion = $info[2]
$upgrades += $Software
}
# view the list
$upgrades | Format-Table
# run through the list, compare with the skip list and execute the upgrade (could be done in the upper foreach as well)
$upgrades | ForEach-Object -Process {
if ($skipUpdate -contains $_.Id)
{
Write-Host "Skipped upgrade to package $($_.id)"
return
}
Write-Host "Going to upgrade $($_.Id)"
winget upgrade -u $_.Id
}
@AsadGG
Copy link

AsadGG commented Sep 4, 2023

i am using this
Start-Process powershell -ArgumentList "winget upgrade -u $($_.Id); Read-Host"
instead of
winget upgrade -u $_.Id

is there a problem with this aproach?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment