Skip to content

Instantly share code, notes, and snippets.

@MathiasReker
Created May 6, 2024 11:59
Show Gist options
  • Save MathiasReker/c2b5ace36645233aecd5fe4af4582cdb to your computer and use it in GitHub Desktop.
Save MathiasReker/c2b5ace36645233aecd5fe4af4582cdb to your computer and use it in GitHub Desktop.
This script closely resembles winget upgrade --all --include-unknown, with the added functionality of being able to skip specific applications.
class Software {
[string]$Name
[string]$Id
[string]$Version
[string]$AvailableVersion
}
$upgradeResult = winget update --include-unknown | Out-String
$lines = $upgradeResult.Split([Environment]::NewLine)
# Find the line that starts with Name, it contains the header
$fl = 0
while (-not $lines[$fl].StartsWith("Name")) {
$fl++
}
# Line $fl has the header, we can find char where we find ID and Version
$idStart = $lines[$fl].IndexOf("Id")
$versionStart = $lines[$fl].IndexOf("Version")
$availableStart = $lines[$fl].IndexOf("Available")
$sourceStart = $lines[$fl].IndexOf("Source")
# Now cycle in real package and split accordingly
$upgradeList = @()
for ($i = $fl + 1; $i -lt $lines.Length; $i++) {
$line = $lines[$i]
if ($line.Length -gt ($availableStart + 1) -and -not $line.StartsWith('-')) {
$name = $line.Substring(0, $idStart).TrimEnd()
$id = $line.Substring($idStart, $versionStart - $idStart).TrimEnd()
$version = $line.Substring($versionStart, $availableStart - $versionStart).TrimEnd()
$available = $line.Substring($availableStart, $sourceStart - $availableStart).TrimEnd()
$software = [Software]::new()
$software.Name = $name
$software.Id = $id
$software.Version = $version
$software.AvailableVersion = $available
$upgradeList += $software
}
}
$upgradeList | Format-Table
$toSkip = @(
'LeNgocKhoa.Laragon'
)
foreach ($package in $upgradeList) {
if (-not ($toSkip -contains $package.Id)) {
Write-Host "Going to upgrade package $($package.id)"
& winget upgrade $package.id
} else {
Write-Host "Skipped upgrade to package $($package.id)"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment