[gelöst] Winget versucht Apps immer und immer wieder neu zu installieren, wenn die Versionsnummer "unknown" ist.
- Holgi
- Guru
- Beiträge: 3086
- Registriert: 12.05.2018, 12:33
- Hat sich bedankt: 391 Mal
- Danke erhalten: 505 Mal
- Gender:
[gelöst] Winget versucht Apps immer und immer wieder neu zu installieren, wenn die Versionsnummer "unknown" ist.
vlt. hat ja der/die Eine oder Andere von Euch auch schon dieses Phänomen kennengelernt:
winget erkennt bei installierten Apps nicht die Versionsnummer der installierten Version und installiert deshalb bei jedem Aufruf von
die App erneut. Bei mir ist es z.B. die vdhCopApp.
Version 1.6.3 ist installiert (über Winget); dennoch zeigt ein Winget Upgrade an:
Das ist echt nervig.
Das Thema wird auch schon im Netz behandelt. Z.B. hier: https://github.com/microsoft/winget-cli/issues/1255
Einige lösen das Problem damit, dass sie die Versionsnummer manuell in der Registry nachtragen.
Grds. finde ich den Ansatz von einem gewissen "Nejat" auf Github gut, der ein Powershell-Script geschrieben hat, welches die "unknown-Version" Apps vor dem Upgrade aussortiert. Darüberhinaus kann man sein Script auch mit einer eigenen Skip-Liste versehen (Apps, welche nicht upgedatet werden sollen)
https://gist.github.com/Nejat?direction ... rt=created
Problem:
in dem Script sind (Unicode?)Zeichen, die ein dt. Windows nicht verarbeiten kann. Ich bekomme da sehr viele Fehlermeldungen.
Kann sich das jemand mal anschauen, der Powershell kann?
winget erkennt bei installierten Apps nicht die Versionsnummer der installierten Version und installiert deshalb bei jedem Aufruf von
Code: Alles auswählen
Winget upgrade --all
Version 1.6.3 ist installiert (über Winget); dennoch zeigt ein Winget Upgrade an:
Code: Alles auswählen
Name ID Version Verfügbar Quelle
---------------------------------------------------------------------------------------------------
VdhCoApp DownloadHelper.VdhCoApp Unknown 1.6.3 winget
Das Thema wird auch schon im Netz behandelt. Z.B. hier: https://github.com/microsoft/winget-cli/issues/1255
Einige lösen das Problem damit, dass sie die Versionsnummer manuell in der Registry nachtragen.
Grds. finde ich den Ansatz von einem gewissen "Nejat" auf Github gut, der ein Powershell-Script geschrieben hat, welches die "unknown-Version" Apps vor dem Upgrade aussortiert. Darüberhinaus kann man sein Script auch mit einer eigenen Skip-Liste versehen (Apps, welche nicht upgedatet werden sollen)
https://gist.github.com/Nejat?direction ... rt=created
Problem:
in dem Script sind (Unicode?)Zeichen, die ein dt. Windows nicht verarbeiten kann. Ich bekomme da sehr viele Fehlermeldungen.
Kann sich das jemand mal anschauen, der Powershell kann?
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
- Holgi
- Guru
- Beiträge: 3086
- Registriert: 12.05.2018, 12:33
- Hat sich bedankt: 391 Mal
- Danke erhalten: 505 Mal
- Gender:
Re: Winget versucht Apps immer und immer wieder neu zu installieren, wenn die Versionsnummer "unknown" ist.
offenbar arbeitet man an einem Schalter für Winget. Leider in der anderen (falschen) Richtung: --include-unknown
https://github.com/microsoft/winget-cli ... 777e60c0b2
--exclude-unknown wäre aus meiner Sicht sinnvoller.
Das script von "Nejat" ohne die Skip-Liste würde mir auch schon reichen.
https://github.com/microsoft/winget-cli ... 777e60c0b2
--exclude-unknown wäre aus meiner Sicht sinnvoller.
Das script von "Nejat" ohne die Skip-Liste würde mir auch schon reichen.
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
- DK2000
- Legende
- Beiträge: 10000
- Registriert: 03.04.2018, 00:07
- Hat sich bedankt: 222 Mal
- Danke erhalten: 679 Mal
- Gender:
Re: Winget versucht Apps immer und immer wieder neu zu installieren, wenn die Versionsnummer "unknown" ist.
Das Problem mit dem "Version: Unknown" ließe sich nur effektiv lösen, wenn winget eine lokale Datenbank mit den Anwendungen pflegen würde, welche es installiert hat. So ist winget auf das Setup der Anwendung angewiesen, welche installiert wird. Und hier trage leider nicht alle Setups die Version in die Registry ein und Setups ohne Uninstaller fallen ganz raus.
"VdhCoApp" ist so ein Kandidat, bei dem das Setup zwar einen Uninstall-Zweig schreibt, aber leider ohne Versions-Informationen für die Version, welche installiert wird. Daher kann winget auch nichts anzeigen. Sobald man das nachholt, weiß auch winget, was installiert ist:
Das finde ich schon die ganze Zeit unsauber gelöst, dass sich winget nur auf das verlässt, was die Setups so treiben und eigenständig nichts in de Richtung speichert. Die Schalter include-unknown und exclude-unknown sind eigentlich nur ein Workaround, um das eigentliche Problem zu umgehen. Eine lokale Datenbank von winget, in welcher es einträgt, was installiert ist, wäre hier besser und nicht einfach nur die "Uninstall"-Zweige durchzugehen und hoffen, das dort vom Setup alles geschrieben wurde, was benötigt wird.
"VdhCoApp" ist so ein Kandidat, bei dem das Setup zwar einen Uninstall-Zweig schreibt, aber leider ohne Versions-Informationen für die Version, welche installiert wird. Daher kann winget auch nichts anzeigen. Sobald man das nachholt, weiß auch winget, was installiert ist:
Code: Alles auswählen
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\weh-iss-net.downloadhelper.coapp_is1]
"DisplayVersion"="1.6.0"
Code: Alles auswählen
PS C:\> winget list VdhCoApp
Name ID Version Verfügbar Quelle
---------------------------------------------------------
VdhCoApp DownloadHelper.VdhCoApp 1.6.0 1.6.3 winget
- Holgi
- Guru
- Beiträge: 3086
- Registriert: 12.05.2018, 12:33
- Hat sich bedankt: 391 Mal
- Danke erhalten: 505 Mal
- Gender:
Re: Winget versucht Apps immer und immer wieder neu zu installieren, wenn die Versionsnummer "unknown" ist.
Danke @DK2000!
Nejat hat es wohl mit seinem Script geschafft, das Problem mit "Unknown" in den Griff zu bekommen.
Die von ihm ebenfalls programmierte Skip-Liste bräuchte ich nicht. Nur das PS-Script, welches wohl winget veranlasst, "unknown Version" Apps einfach auszulassen. Nur bekomme ich es nicht zum Laufen. Vlt. kannst du oder @Ben hier helfen?
Nejat hat es wohl mit seinem Script geschafft, das Problem mit "Unknown" in den Griff zu bekommen.
Die von ihm ebenfalls programmierte Skip-Liste bräuchte ich nicht. Nur das PS-Script, welches wohl winget veranlasst, "unknown Version" Apps einfach auszulassen. Nur bekomme ich es nicht zum Laufen. Vlt. kannst du oder @Ben hier helfen?
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
- Holgi
- Guru
- Beiträge: 3086
- Registriert: 12.05.2018, 12:33
- Hat sich bedankt: 391 Mal
- Danke erhalten: 505 Mal
- Gender:
Re: Winget versucht Apps immer und immer wieder neu zu installieren, wenn die Versionsnummer "unknown" ist.
habe es jetzt mal so vorerst erledigt:
Code: Alles auswählen
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\weh-iss-net.downloadhelper.coapp_is1]
"DisplayVersion"="1.6.3"
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
- DK2000
- Legende
- Beiträge: 10000
- Registriert: 03.04.2018, 00:07
- Hat sich bedankt: 222 Mal
- Danke erhalten: 679 Mal
- Gender:
Re: Winget versucht Apps immer und immer wieder neu zu installieren, wenn die Versionsnummer "unknown" ist.
Wird aber beim nächsten Update wieder entfernt.
Mit der .ps1 ist es das Problem, das winget nicht wirklich in vollem Umfang für die PowerShell gedacht ist und man daher eine Filter benötigt, welcher aus der Pipe dem "Müll" entfernt:
Und die Paketnamen in der Pipe haben da teilweise auch seltsame Zeichen, weil der Name abgeschnitten wird, z.B. "Microsoft Visual C++ 2015-2022 RedistrÔǪ". Das muss man natürlich auch korrigieren. Dafür ist wohl der Abschnitt gedacht:
Aber da bin ich gerade überfragt, was man da wie eintragen muss, damit das durch läuft.
Ist auch interessant, dass der Script mit der 5.1 anders läuft im Vergleich zur 7.2.
Scheint nicht so einfach zu sein, winget in einem PowerShell-Skript zu verwenden.
Mit der .ps1 ist es das Problem, das winget nicht wirklich in vollem Umfang für die PowerShell gedacht ist und man daher eine Filter benötigt, welcher aus der Pipe dem "Müll" entfernt:
Code: Alles auswählen
ÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûÆÔûÆÔûÆÔûÆÔûÆÔûÆÔûÆÔûÆÔûÆÔûÆÔûÆÔûÆÔûÆÔûÆÔûÆÔûÆÔûÆÔûÆÔûÆÔûÆ 1024 KB / 2.95 MB
ÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûÆÔûÆÔûÆÔûÆÔûÆÔûÆÔûÆÔûÆÔûÆÔûÆ 2.00 MB / 2.95 MB
ÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûêÔûê 2.95 MB / 2.95 MB
Code: Alles auswählen
# temporary check if any properties have unicode garbled text
# this is only until winget piped output is fixed or supports power-shell natively
[bool] $garbled = (
$pacakge.Name.EndsWith("ΓÇ") -or
$pacakge.Id.EndsWith("ΓÇ") -or $pacakge.Id.StartsWith("ª ") -or
$pacakge.Current.EndsWith("ΓÇ") -or $pacakge.Current.StartsWith("ª ") -or
$pacakge.Available.EndsWith("ΓÇ") -or $pacakge.Available.StartsWith("ª ") -or
$pacakge.Source.EndsWith("ΓÇ") -or $pacakge.Source.StartsWith("ª ")
)
Ist auch interessant, dass der Script mit der 5.1 anders läuft im Vergleich zur 7.2.
Scheint nicht so einfach zu sein, winget in einem PowerShell-Skript zu verwenden.
Re: Winget versucht Apps immer und immer wieder neu zu installieren, wenn die Versionsnummer "unknown" ist.
Da ich ständig ein Problem mit dem Upgrade eines bestimmten Programms hatte, habe ich mir mal das Powershell script angeschaut.
Im Moment läuft es bei mir auf mehreren Rechnern, nachdem ich folgendes geändert habe:
Im Moment läuft es bei mir auf mehreren Rechnern, nachdem ich folgendes geändert habe:
- In Notepad++ pro forma nach UTF-8 konvertiert. Dann wird zumindest der Codeteil mit der Abfrage der Sonderzeichen korrekt durchlaufen.
Code: Alles auswählen
$pacakge.Name.EndsWith("GÇ") -or $pacakge.Id.EndsWith("GÇ") -or $pacakge.Id.StartsWith("ª ") -or...
- Dann bleibt noch das Problem der Spaltentitel auf deutschem Windows. Denn die werden hier explizit abgefragt, um die Position und Länge der Paketnamen, ID, Version usw. abfragen zu können. Umlaute sind auch ein Problem. Diesen Teil im Script habe ich wie folgt geändert:
"Verf" steht für "Verfügung"; In " Quelle" das blank vor dem "Q" nicht vergessen; Und "ID" immer im gesamten Code auf Großbuchstaben ändern
Code: Alles auswählen
int32] $IdIndex = $source[$titleLine].IndexOf("ID") [int32] $currentIndex = $source[$titleLine].IndexOf("Version") [int32] $availableIndex = $source[$titleLine].IndexOf("Verf") [int32] $sourceIndex = $source[$titleLine].IndexOf(" Quelle")
- Wenn alles klappt, dann scharf schalten, in dem man in dieser Zeile:
aus dem "$false" ein "$true" macht
Code: Alles auswählen
[switch] $upgrade = $true
- Holgi
- Guru
- Beiträge: 3086
- Registriert: 12.05.2018, 12:33
- Hat sich bedankt: 391 Mal
- Danke erhalten: 505 Mal
- Gender:
Re: Winget versucht Apps immer und immer wieder neu zu installieren, wenn die Versionsnummer "unknown" ist.
magst du bitte mal das von dir editierte komplette Script hier posten? Danke!
Wie rufst du es dann auf?
Wie rufst du es dann auf?
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
Re: Winget versucht Apps immer und immer wieder neu zu installieren, wenn die Versionsnummer "unknown" ist.
Hier das gesamte script
Der Aufruf des scripts kann auf mehrere Arten erfolgen. Außerdem müssen die Ausführungsrichtlinien für Powershell geändert werden - ist vielleicht auch schon bekannt? - am besten in "Set-ExecutionPolicy -scope CurrentUser -executionPolicy RemoteSigned"
Dann in die Powershell Konsole zum Ordner des Scripts wechseln und folgendes eingeben: ./meinscript.ps1
Oder den "ISE" (Powershell editor) aufrufen und dort das script ausführen.
Code: Alles auswählen
param(
# provide a skiplist file to define pacakges to skip
[string] $skipFile = "winget-skiplist",
# true to upgrade eligible packages, false dry run
[switch] $upgrade = $false
)
# get raw output of available upgrades, not power-shell native yet
[string[]] $source = winget upgrade
# check if available upgrades succeeded, otherwise display message to user
if ($lastExitCode -ne 0) {
Write-Host
Write-Host checking winget upgrade failed, try again - ForegroundColor - Red
Write-Host
exit $lastExitCode
}
# load and parse a skip list definition file if it exists, otherwise ignore skips
[string[]] $skip = if (Test-Path -Path $skipFile -PathType Leaf) {
Get-Content $skipFile | ForEach-Object {
$_.Split('#')[0].Trim()
}
} else {
@("") # otherwise $skip is null
}
# find the index of title line, sometimes winget outputs unpredictably up until the title line
[int32] $titleLine = ($source | Select-String -Pattern "ID" | Select-Object -Expand LineNumber -First 1) - 1
# get all the indexes of column titles for parsing
[int32] $IdIndex = $source[$titleLine].IndexOf("ID")
[int32] $currentIndex = $source[$titleLine].IndexOf("Version")
[int32] $availableIndex = $source[$titleLine].IndexOf("Verf")
[int32] $sourceIndex = $source[$titleLine].IndexOf(" Quelle")
# fail if any of the indexes could not be determined
if ($IdIndex -eq $null -or $currentIndex -eq $null -or $availableIndex -eq $null -or $sourceIndex -eq $null) {
Write-Host
Write-Host winget failed because garbled output, try again - ForegroundColor - Yellow
Write-Host
exit -1
}
# parse all of the listed packages into an object; Package { Name, Id, Current, Available, Source, Skip }
[PSCustomObject[]] $updates = $source | Select-Object -Skip $($titleLine + 2) | Select-Object -SkipLast 1 | ForEach-Object {
[string] $name = $_.SubString(0, $IdIndex).Trim()
[string] $id = $_.SubString($IdIndex, $currentIndex - $IdIndex).Trim()
[string] $current = $_.SubString($currentIndex, $availableIndex - $currentIndex).Trim()
[string] $available = $_.SubString($availableIndex, $sourceIndex - $availableIndex).Trim()
[string] $source = $_.SubString($sourceIndex, $_.Length - $sourceIndex).Trim()
[PSCustomObject] @{
Name = $name
Id = $id
Current = $Current
Available = $available
Source = $source
Skip = $skip.Contains($name)
}
}
# determine the widest package name for column padding
[int32] $namePadding = ($updates | ForEach-Object { $_.Name.Length } | Measure-Object -Maximum | Select-Object -Property Maximum).Maximum + 2
# determin the widest package version for column padding
[int32] $versionPadding = ($updates | ForEach-Object { [math]::Max($_.Current.Length, $_.Available.Length) } | Measure-Object -Maximum | Select-Object -Property Maximum).Maximum + 2
# const status width padding
[int32] $statusWidth = 42 # ironic? or cosmic? =P
# write table column titles
Write-Host
Write-Host "Name".PadRight($namePadding, ' ') "Version".PadLeft($versionPadding, ' ') "Available".PadLeft($versionPadding, ' ') " Status"
Write-Host ("-" * $namePadding) ("-" * $versionPadding) ("-" * $versionPadding) " " ("-" * $statusWidth)
Write-Host
# process each package
foreach ($pacakge in $updates) {
# output package info coumns
Write-Host $pacakge.Name.PadRight($namePadding) $pacakge.Current.PadLeft($versionPadding, ' ') $pacakge.Available.PadLeft($versionPadding, ' ') "- " -NoNewline
# check if package should be skipped?
if ($pacakge.Skip) {
# output package status
Write-Host "skipping" -ForegroundColor DarkYellow
if ($upgrade) { Write-Host }
} else {
# check if package version is unknown
if ($pacakge.Current -eq "Unknown") {
# output package status
Write-Host "skipping unkown version, check manually" -ForegroundColor Cyan
if ($upgrade) { Write-Host }
} else {
# temporary check if any properties have unicode garbled text
# this is only until winget piped output is fixed or supports power-shell natively
[bool] $garbled = (
$pacakge.Name.EndsWith("GÇ") -or
$pacakge.Id.EndsWith("GÇ") -or $pacakge.Id.StartsWith("ª ") -or
$pacakge.Current.EndsWith("GÇ") -or $pacakge.Current.StartsWith("ª ") -or
$pacakge.Available.EndsWith("GÇ") -or $pacakge.Available.StartsWith("ª ") -or
$pacakge.Source.EndsWith("GÇ") -or $pacakge.Source.StartsWith("ª ")
)
# check if packages should upgraded
if ($upgrade) {
# check if any property is garbled
if ($garbled) {
# output package status and continue to next package
Write-Host "skipping, garbled identifiers prevents update" -ForegroundColor Yellow
} else {
# perform pacakge upgrade, capture output
[string[]] $result = winget upgrade --name """$($pacakge.Name)""" --id """$($pacakge.Id)""" --version """$($pacakge.Available)"""
# check if pacakge upgrade succeeded and output package status accordingly
if ($lastExitCode -eq 0) {
Write-Host "updated" -ForegroundColor Blue
} else {
Write-Host "failed to update" -ForegroundColor Red
Write-Host
# demonstrate command used for upgrade
Write-Host ">" winget upgrade --name """$($pacakge.Name)""" --id """$($pacakge.Id)""" --version """$($pacakge.Available)""" -ForegroundColor Yellow
# output captured output from package upgrade
foreach ($line in $result) {
Write-Host $line -ForegroundColor DarkGray
}
}
}
Write-Host
} else {
# check if any property is garbled and output package status accordingly
if ($garbled) {
Write-Host "skipping new version, garbled identifiers prevent update" -ForegroundColor Yellow
} else {
Write-Host "new version available" -ForegroundColor Blue
}
}
}
}
}
Write-Host
Dann in die Powershell Konsole zum Ordner des Scripts wechseln und folgendes eingeben: ./meinscript.ps1
Oder den "ISE" (Powershell editor) aufrufen und dort das script ausführen.
- Holgi
- Guru
- Beiträge: 3086
- Registriert: 12.05.2018, 12:33
- Hat sich bedankt: 391 Mal
- Danke erhalten: 505 Mal
- Gender:
Re: Winget versucht Apps immer und immer wieder neu zu installieren, wenn die Versionsnummer "unknown" ist.
ich bekomme beim Aufruf nur Fehlermeldungen. Sieht so aus:
Code: Alles auswählen
./winget_test.ps1
Ausnahme beim Aufrufen von "Substring" mit 2 Argument(en): "Die Länge darf nicht kleiner als 0 (null) sein.
Parametername: length"
In C:\Users\Darth Vader\Downloads\winget_test.ps1:47 Zeichen:5
+ [string] $name = $_.SubString(0, $IdIndex).Trim()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentOutOfRangeException
Ausnahme beim Aufrufen von "Substring" mit 2 Argument(en): "StartIndex darf nicht kleiner als Null sein.
Parametername: startIndex"
In C:\Users\Darth Vader\Downloads\winget_test.ps1:48 Zeichen:5
+ [string] $id = $_.SubString($IdIndex, $currentIndex - $IdI ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentOutOfRangeException
Ausnahme beim Aufrufen von "Substring" mit 2 Argument(en): "StartIndex darf nicht kleiner als Null sein.
Parametername: startIndex"
In C:\Users\Darth Vader\Downloads\winget_test.ps1:49 Zeichen:5
+ [string] $current = $_.SubString($currentIndex, $availableIndex ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentOutOfRangeException
Ausnahme beim Aufrufen von "Substring" mit 2 Argument(en): "StartIndex darf nicht kleiner als Null sein.
Parametername: startIndex"
In C:\Users\Darth Vader\Downloads\winget_test.ps1:50 Zeichen:5
+ [string] $available = $_.SubString($availableIndex, $sourceIndex ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentOutOfRangeException
Ausnahme beim Aufrufen von "Substring" mit 2 Argument(en): "StartIndex darf nicht kleiner als Null sein.
Parametername: startIndex"
In C:\Users\Darth Vader\Downloads\winget_test.ps1:51 Zeichen:5
+ [string] $source = $_.SubString($sourceIndex, $_.Length - $sou ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentOutOfRangeException
Name Version Available Status
-- -- -- ------------------------------------------
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\Users\Darth Vader\Downloads\winget_test.ps1:79 Zeichen:5
+ Write-Host $pacakge.Name.PadRight($namePadding) $pacakge.Current. ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\Users\Darth Vader\Downloads\winget_test.ps1:95 Zeichen:13
+ [bool] $garbled = (
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
Re: Winget versucht Apps immer und immer wieder neu zu installieren, wenn die Versionsnummer "unknown" ist.
OK, das hatte ich auch dauernd. Bei mir lags daran, dass die Spaltenüberschriften von winget upgrade nicht korrekt ausgelesen werden konnten. Bitte zeig doch mal den output von "winget upgrade", wie es bei dir aussieht.
Und dann noch was. Die Codezeile
wieder in
umwandeln.
Den "switch" Parameter hatte ich übersehen. Beim Aufruf ohne Parameter (also ./winget_test.ps1) wird kein upgrade ausgeführt. Beim Aufruf mit Parameter (also ./winget_test.ps1 -upgrade) wird das upgrade auch ausgeführt.
Aber schauen wir erstmal, ob wir das Teil bei dir zum Laufen bekommen.
Und dann noch was. Die Codezeile
Code: Alles auswählen
[switch] $upgrade = $true
Code: Alles auswählen
[switch] $upgrade = $false
Den "switch" Parameter hatte ich übersehen. Beim Aufruf ohne Parameter (also ./winget_test.ps1) wird kein upgrade ausgeführt. Beim Aufruf mit Parameter (also ./winget_test.ps1 -upgrade) wird das upgrade auch ausgeführt.
Aber schauen wir erstmal, ob wir das Teil bei dir zum Laufen bekommen.
- DK2000
- Legende
- Beiträge: 10000
- Registriert: 03.04.2018, 00:07
- Hat sich bedankt: 222 Mal
- Danke erhalten: 679 Mal
- Gender:
Re: Winget versucht Apps immer und immer wieder neu zu installieren, wenn die Versionsnummer "unknown" ist.
Diese Fehler erscheinen bei mir auch. Liegt aber daran, dass die Updateliste leer ist und der Abschnitt nicht greift:
Das führt dann im weiteren Verlauf zu Fehlern, da es ja nicht an Name, ID, Version etc. gibt. Der Skript läuft aber weiter und das führt dann zu den Fehlern.
In der Pipe kommt nur das an:
Code: Alles auswählen
if ($IdIndex -eq $null -or $currentIndex -eq $null -or $availableIndex -eq $null -or $sourceIndex -eq $null) {
Write-Host
Write-Host winget failed because garbled output, try again - ForegroundColor - Yellow
Write-Host
exit -1
In der Pipe kommt nur das an:
Code: Alles auswählen
-\
-
Es wurde kein installiertes Paket gefunden, das den Eingabekriterien entspricht.
- Holgi
- Guru
- Beiträge: 3086
- Registriert: 12.05.2018, 12:33
- Hat sich bedankt: 391 Mal
- Danke erhalten: 505 Mal
- Gender:
Re: Winget versucht Apps immer und immer wieder neu zu installieren, wenn die Versionsnummer "unknown" ist.
ah, verstehe. Danke!
Ich habe mal die Display Version für vdhcoApp aus der Registry wieder entfernt.
Winget Upgrade hat dann - wie erwartet - vdhcoApp 1.6.3 als Upgrade vorgeschlagen.
Sodann das Powershell script ausgeführt. Siehe da:
Funktioniert also doch wohl und ohne Fehlermeldungen, wenn es etwas findet (mit Unknown).
Wäre natürlich schön, wenn diese Fehlermeldungen unterblieben, wenn nix gefunden wird; rein der Optik halber.
Ich habe mal die Display Version für vdhcoApp aus der Registry wieder entfernt.
Winget Upgrade hat dann - wie erwartet - vdhcoApp 1.6.3 als Upgrade vorgeschlagen.
Sodann das Powershell script ausgeführt. Siehe da:
Code: Alles auswählen
Name Version Available Status
---------- --------- --------- ------------------------------------------
VdhCoApp Unknown 1.6.3 - skipping
Wäre natürlich schön, wenn diese Fehlermeldungen unterblieben, wenn nix gefunden wird; rein der Optik halber.
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
Re: Winget versucht Apps immer und immer wieder neu zu installieren, wenn die Versionsnummer "unknown" ist.
Bitte mal diese Version testen. Die sollte auch funktionieren, wenn winget upgrade keine App findet
Code: Alles auswählen
param(
# provide a skiplist file to define pacakges to skip
[string] $skipFile = "winget-skiplist",
# true to upgrade eligible packages, false dry run
[switch] $upgrade = $false
)
# get raw output of available upgrades, not power-shell native yet
[string[]] $source = winget upgrade
# check if available upgrades succeeded, otherwise display message to user
if ($lastExitCode -ne 0) {
Write-Host
Write-Host checking winget upgrade failed, try again - ForegroundColor - Red
Write-Host
exit $lastExitCode
}
# load and parse a skip list definition file if it exists, otherwise ignore skips
[string[]] $skip = if (Test-Path -Path $skipFile -PathType Leaf) {
Get-Content $skipFile | ForEach-Object {
$_.Split('#')[0].Trim()
}
} else {
@("") # otherwise $skip is null
}
# find the index of title line, sometimes winget outputs unpredictably up until the title line
[int32] $titleLine = ($source | Select-String -Pattern "ID" | Select-Object -Expand LineNumber -First 1) - 1
# fail if no title line ist found; no upgradable app was found
if ($titleLine -le $null) {
foreach ($line in $source) {
Write-Host $line -ForegroundColor Yellow
}
Write-Host
exit -1
}
# get all the indexes of column titles for parsing
[int32] $IdIndex = $source[$titleLine].IndexOf("ID")
[int32] $currentIndex = $source[$titleLine].IndexOf("Version")
[int32] $availableIndex = $source[$titleLine].IndexOf("Verf")
[int32] $sourceIndex = $source[$titleLine].IndexOf(" Quelle")
# fail if any of the indexes could not be determined
if ($IdIndex -eq $null -or $currentIndex -eq $null -or $availableIndex -eq $null -or $sourceIndex -eq $null) {
Write-Host
Write-Host winget failed because garbled output, try again - ForegroundColor - Yellow
Write-Host
exit -1
}
# parse all of the listed packages into an object; Package { Name, Id, Current, Available, Source, Skip }
[PSCustomObject[]] $updates = $source | Select-Object -Skip $($titleLine + 2) | Select-Object -SkipLast 1 | ForEach-Object {
[string] $name = $_.SubString(0, $IdIndex).Trim()
[string] $id = $_.SubString($IdIndex, $currentIndex - $IdIndex).Trim()
[string] $current = $_.SubString($currentIndex, $availableIndex - $currentIndex).Trim()
[string] $available = $_.SubString($availableIndex, $sourceIndex - $availableIndex).Trim()
[string] $source = $_.SubString($sourceIndex, $_.Length - $sourceIndex).Trim()
[PSCustomObject] @{
Name = $name
Id = $id
Current = $Current
Available = $available
Source = $source
Skip = $skip.Contains($name)
}
}
# determine the widest package name for column padding
[int32] $namePadding = ($updates | ForEach-Object { $_.Name.Length } | Measure-Object -Maximum | Select-Object -Property Maximum).Maximum + 2
# determin the widest package version for column padding
[int32] $versionPadding = ($updates | ForEach-Object { [math]::Max($_.Current.Length, $_.Available.Length) } | Measure-Object -Maximum | Select-Object -Property Maximum).Maximum + 2
# const status width padding
[int32] $statusWidth = 42 # ironic? or cosmic? =P
# write table column titles
Write-Host
Write-Host "Name".PadRight($namePadding, ' ') "Version".PadLeft($versionPadding, ' ') "Available".PadLeft($versionPadding, ' ') " Status"
Write-Host ("-" * $namePadding) ("-" * $versionPadding) ("-" * $versionPadding) " " ("-" * $statusWidth)
Write-Host
# process each package
foreach ($pacakge in $updates) {
# output package info coumns
Write-Host $pacakge.Name.PadRight($namePadding) $pacakge.Current.PadLeft($versionPadding, ' ') $pacakge.Available.PadLeft($versionPadding, ' ') "- " -NoNewline
# check if package should be skipped?
if ($pacakge.Skip) {
# output package status
Write-Host "skipping" -ForegroundColor DarkYellow
if ($upgrade) { Write-Host }
} else {
# check if package version is unknown
if ($pacakge.Current -eq "Unknown") {
# output package status
Write-Host "skipping unkown version, check manually" -ForegroundColor Cyan
if ($upgrade) { Write-Host }
} else {
# temporary check if any properties have unicode garbled text
# this is only until winget piped output is fixed or supports power-shell natively
[bool] $garbled = (
$pacakge.Name.EndsWith("GÇ") -or
$pacakge.Id.EndsWith("GÇ") -or $pacakge.Id.StartsWith("ª ") -or
$pacakge.Current.EndsWith("GÇ") -or $pacakge.Current.StartsWith("ª ") -or
$pacakge.Available.EndsWith("GÇ") -or $pacakge.Available.StartsWith("ª ") -or
$pacakge.Source.EndsWith("GÇ") -or $pacakge.Source.StartsWith("ª ")
)
# check if packages should upgraded
if ($upgrade) {
# check if any property is garbled
if ($garbled) {
# output package status and continue to next package
Write-Host "skipping, garbled identifiers prevents update" -ForegroundColor Yellow
} else {
# perform pacakge upgrade, capture output
[string[]] $result = winget upgrade --name """$($pacakge.Name)""" --id """$($pacakge.Id)""" --version """$($pacakge.Available)"""
# check if pacakge upgrade succeeded and output package status accordingly
if ($lastExitCode -eq 0) {
Write-Host "updated" -ForegroundColor Blue
} else {
Write-Host "failed to update" -ForegroundColor Red
Write-Host
# demonstrate command used for upgrade
Write-Host ">" winget upgrade --name """$($pacakge.Name)""" --id """$($pacakge.Id)""" --version """$($pacakge.Available)""" -ForegroundColor Yellow
# output captured output from package upgrade
foreach ($line in $result) {
Write-Host $line -ForegroundColor DarkGray
}
}
}
Write-Host
} else {
# check if any property is garbled and output package status accordingly
if ($garbled) {
Write-Host "skipping new version, garbled identifiers prevent update" -ForegroundColor Yellow
} else {
Write-Host "new version available" -ForegroundColor Blue
}
}
}
}
}
Write-Host
- Holgi
- Guru
- Beiträge: 3086
- Registriert: 12.05.2018, 12:33
- Hat sich bedankt: 391 Mal
- Danke erhalten: 505 Mal
- Gender:
Re: Winget versucht Apps immer und immer wieder neu zu installieren, wenn die Versionsnummer "unknown" ist.
funktioniert super! Danke! Danke
Mal ´ne Frage:
habt ihr das Script auch mal mit einer Skip-Liste ausprobiert, so wie von Nejat (dem Ursprungssauthor) vorgesehen? Wie ist da der Aufruf?

Mal ´ne Frage:
habt ihr das Script auch mal mit einer Skip-Liste ausprobiert, so wie von Nejat (dem Ursprungssauthor) vorgesehen? Wie ist da der Aufruf?
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114