boxhandschuh
Goto Top

Warum sind beide Arrays unterschiedlich?

Moin. Ich habe ein Problem mit Powershell. Ich habe ein Skript geschrieben für automatisches updaten. Dabei lese ich die installierte Versionsnummer aus und vergleiche sie mit der Versionsnummer auf dem offiziellen Server. Das funktioniert wie gewollt. Dann hatte ich mir überlegt eine Webseite aufzusetzen, auf der nur die aktuellste Versionsnummer geschrieben ist. Die will ich dann mit der installierten Version vergleichen. So habe ich die Kontrolle über den Download.
Das funktioniert nicht aus Gründen, die ich nicht verstehe.
Ich lese also die installierte Versionsnummer aus, vergleiche sie mittels -ne Vergleich mit der Nummer auf meiner Webseite. Obwohl die gleichen Nummern ausgelesen werden, gibt Powershell als Ergebnis "nicht gleich" wieder.
Das interessante ist, wenn ich den Output aus den jeweiligen Abfragen in einer txt-Datei speichere, dann haben die beiden txt-Dateien eine unterschiedliche Größe. Leerzeichen sind gelöscht. Augenscheinlich stehen in beiden die selben Zeichen drin. Wie kann das sein?

Content-Key: 1976745164

Url: https://administrator.de/contentid/1976745164

Printed on: April 24, 2024 at 11:04 o'clock

Mitglied: 1915348599
1915348599 Feb 22, 2022 updated at 08:40:18 (UTC)
Goto Top
Ich habe ein Skript geschrieben
Nimm uns mal die Tomaten von den Augen bitte ....
Member: Boxhandschuh
Boxhandschuh Feb 22, 2022 at 09:10:46 (UTC)
Goto Top
Zitat von @1915348599:

Ich habe ein Skript geschrieben
Nimm uns mal die Tomaten von den Augen bitte ....
Gesamtes Skript oder nur der Teil, der ausliest?
Mitglied: 1915348599
1915348599 Feb 22, 2022 updated at 10:07:41 (UTC)
Goto Top
Zitat von @bolsse:
Gesamtes Skript oder nur der Teil, der ausliest?
Den Teil in dem man sieht wie du die Inhalte beider Variablen ausliest und dann vergleichst.
Zusätzlich evt. den HTML/Text-Inhalt der Webseite wo du die Versionsnummer ablegst und mit welchem Content-Type du diese zurücklieferst.
Member: Boxhandschuh
Boxhandschuh Feb 22, 2022 at 11:05:38 (UTC)
Goto Top
Zitat von @1915348599:

Zitat von @bolsse:
Gesamtes Skript oder nur der Teil, der ausliest?
Den Teil in dem man sieht wie du die Inhalte beider Variablen ausliest und dann vergleichst.
Zusätzlich evt. den HTML/Text-Inhalt der Webseite wo du die Versionsnummer ablegst und mit welchem Content-Type du diese zurücklieferst.

Hier das Auslesen der Variablen vom eigenen PC.
$insver = Get-itempropertyvalue "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\windows\currentversion\Uninstall\3082-4137-0696-1197" -name "displayversion"  
Hier noch mal das gleiche. Ein Test. Mit dieser Zeile wollte ich nur ne andere Methode testen
$t2ins = get-package -name "T2*"  | Select-Object -ExpandProperty version  
Hiermit lese ich die Version auf der offiziellen Webseite aus.
$t2_dl_aktuell = ((Invoke-WebRequest -Uri "https://download.t2med.de/server/").allelements | Where-Object {$_.outertext -like "[1-9]*.[1-9]*.[1-9]*"}).outertext  
Vergleich der beiden Versionen.
($t2_dl_aktuell2 -ne $insver)
Hier funktioniert der Vergleich wie er soll.
Hier die Webseite mit bloß der Versionsnummer.
<!DOCTYPE html>
<html lang="en" dir="ltr" class="sid-plesk">  
<head>
	<meta charset="UTF-8"/>  
</head>
<body>
22.2.2
</body>
</html>
Hier wird die Versionsnummer auf der eigenen Webseite ausgelesen.
((Invoke-WebRequest -uri "https://t2.pink-it.info/t2version.html").allelements) | Select-Object -ExpandProperty innertext | sort | Get-Unique  
Mitglied: 1915348599
Solution 1915348599 Feb 22, 2022 updated at 11:13:27 (UTC)
Goto Top
Besser so
$t2_dl_aktuell = (iwr 'https://t2.pink-it.info/t2version.html').parsedhtml.body.innerText.trim()  
und Vergleich dann mittels
if ([version]$t2_dl_aktuell2 -gt [version]$insver) {
 # .....
}
machen

Ich würde die Webseite ja gleich nur als Content-Type = "text/plain" ohne überflüssiges html gedöhns ausliefern ...
Member: Boxhandschuh
Boxhandschuh Feb 22, 2022 at 11:39:13 (UTC)
Goto Top
Zitat von @1915348599:

Besser so
$t2_dl_aktuell = (iwr 'https://t2.pink-it.info/t2version.html').parsedhtml.body.innerText.trim()  
und Vergleich dann mittels
if ([version]$t2_dl_aktuell2 -gt [version]$insver) {
 # .....
}
machen

Ich würde die Webseite ja gleich nur als Content-Type = "text/plain" ohne überflüssiges html gedöhns ausliefern ...
Danke für die Antworten.
Warum -gt? Angenommen, die installierte Version wäre 22.9.9 und die aktuellste wäre 23.0.0. Käme dann nicht als Ergebnis 22.9.9 > 23.0.0 raus?
Mitglied: 1915348599
1915348599 Feb 22, 2022 updated at 12:30:54 (UTC)
Goto Top
Zitat von @bolsse:
Warum -gt? Angenommen, die installierte Version wäre 22.9.9 und die aktuellste wäre 23.0.0. Käme dann nicht als Ergebnis 22.9.9 > 23.0.0 raus?
Nö, wenn die Version auf der Webseite größer als die installierte nur dann mach was ... Hier wird echter Versionsvergleich mit dem [version] Objekt gemacht face-smile.
[version]'23.0.0' -gt [version]'22.9.9'  
Ergibt $true
Member: Boxhandschuh
Boxhandschuh Feb 22, 2022 at 14:29:18 (UTC)
Goto Top
Zitat von @1915348599:

Zitat von @bolsse:
Warum -gt? Angenommen, die installierte Version wäre 22.9.9 und die aktuellste wäre 23.0.0. Käme dann nicht als Ergebnis 22.9.9 > 23.0.0 raus?
Nö, wenn die Version auf der Webseite größer als die installierte nur dann mach was ... Hier wird echter Versionsvergleich mit dem [version] Objekt gemacht face-smile.
[version]'23.0.0' -gt [version]'22.9.9'  
Ergibt $true

Danke. Sehr nützlich. Funktioniert jetzt alles wie es soll. Ich glaube, dieser Trim()-Befehl hat es gebracht. Steckt hinter [version] das hier?
https://docs.microsoft.com/en-us/dotnet/api/system.version?view=net-6.0
Mitglied: 1915348599
1915348599 Feb 22, 2022 at 14:50:32 (UTC)
Goto Top
Zitat von @bolsse:

Steckt hinter [version] das hier?
https://docs.microsoft.com/en-us/dotnet/api/system.version?view=net-6.0

Exakt.