Anzeige

Am Puls von Microsoft

Anzeige

Systemprogramme Winget-Tool für Update

PeteM92

gehört zum Inventar
Was zu beachten ist:
Es gibt Kaufsoftware, bei der man mit dem Kauf nur eine bestimmte Version erwirbt, und auch Software, die beim Update Eigenschaften verliert.
Da sollte man Winget nicht werkeln lassen, ohne selbst mitzudenken.
 
Zuletzt bearbeitet von einem Moderator:
Anzeige

Hellriegel

Herzlich willkommen
Ausnahmen bei winget erstellen

Ich pflege meine installierten Programme - wie viele andere auch - mit winget.
Leider gibt es keine Möglichkeit, beim Upgrade Programme auszuschliessen.
Dafür habe ich dieses Powershell-Skript geschrieben. Falls es einer braucht, ...

Installation:
1. Kopiere den Code in eine .txt-Datei mit beliebigem Namen, aber ersetze .txt durch .ps1 .
2. Im Kontextmenü "mit Powershell ausführen".
3. Sind bei Dir Powershell-Skripte gesperrt, beachte den Kommentar im Skript.

Code:
<#

09.10.22
Upgrade.ps1

Wenn bei Dir die Powershell-Skriptausführung gesperrt ist,
musst Du in der Powershell-Konsole (Windows-Terminal; Zeilenbeginn PS) den Befehl

set-executionpolicy -scope currentuser -executionpolicy unrestricted -force

eingeben. Damit sind dann Skripte nach Sicherheitsabfrage zugelassen.

Unten kannst Du die Liste $ausgeschlosseneIDs ändern.

Bevor die Upgrades ausgeführt werden, wirst Du gefragt.

#>

#Liste der ausgeschlossenen IDs in beliebiger Reihenfolge:

$ausgeschlosseneIDs = @(
"Amazon.Kindle"
"Microsoft.Edge"
"Microsoft.VCRedist.2015+.x64"
"Microsoft.VCRedist.2015+.x86"
"Microsoft.VC++2015-2022Redist-x64"
"Microsoft.VC++2015-2022Redist-x86"
)

# (in der ISE das Skript 2-mal aufrufen)
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

$wingetAusgabe = winget upgrade | Out-String
$zeilen = $wingetAusgabe.Split([Environment]::NewLine)

$upgrades = @()
For ($i = 0; $i -lt $zeilen.Length; $i++)
{
    $zeile = $zeilen[$i]
    $farbe = $false

    if ($zeile.length -eq 0 -or $zeile.StartsWith(" ")) { continue }

    if ($zeile.StartsWith("Name"))
    {
        $startID = $zeile.IndexOf("ID")
        $startVersion = $zeile.IndexOf("Version")
        $laengeID = $startVersion - $startID - 1
    }

    if ($zeile.EndsWith("winget"))
    {
        $zeileID = $zeile.Substring($startID, $laengeID).Trim()
        if ($zeileID -in $ausgeschlosseneIDs) { $farbe = $true }
        else { $upgrades += $zeileID }
    }

    if ($farbe) { Write-Host -ForegroundColor Red $zeile }
    else { Write-Host $zeile }
}

$anzahlUpgrades = $upgrades.Count
"$anzahlUpgrades werden aktualisiert."

if ($anzahlUpgrades -gt 0) {read-host "`n$anzahlUpgrades Upgrades starten: ↩"}
foreach ($id in $upgrades) { winget upgrade $id }
read-host "`nFertig! ↩"
 
Anzeige
Oben