WMI Abfrage einer Treiber Version "Größer als oder gleich"

Moderators: MVogt, moderators

Post Reply
Gladop
Posts: 24
Joined: 27. Apr 2022, 16:49
Contact:

WMI Abfrage einer Treiber Version "Größer als oder gleich"

Post by Gladop » 23. Nov 2023, 13:28

Hallo zusammen,

ich habe eine Paket zum aktualisieren der Nvidia-Treiber unserer PCs erstellt.
Sollte es in Zukunft PCs mit neueren Treibern geben, möchte ich natürlich nicht, dass dieses Paket dort installiert wird.
Um das zu verhindern, wollte ich folgendes einstellen:

In den Paketeigenschaften --> Bedingungen --> Erweitert --> Bereits installiert:
WMI Abfrage: Get-WmiObject -Query 'SELECT DriverVersion FROM Win32_VideoController where Caption like "NVIDIA%"
Operator: Größer als oder gleich
Wert: 31.0.15.3770

Leider wird das Paket trotzdem installiert.
Stelle ich den Operator auf "gleich" wird das Paket nicht installiert und im Log steht wie gewünscht "Preconditions failed".

Ich vermute, dass "Größer als oder gleich" nur Zahlen vergleichen kann und das Problem durch die Punkte verursacht wird.
Kann das jemand bestätigen oder hat sogar eine Lösung bzw. Workaround?

Mit freundlichen Grüßen
Gladop

SRO
Posts: 28
Joined: 23. Jan 2018, 13:38
Contact:

Re: WMI Abfrage einer Treiber Version "Größer als oder gleich"

Post by SRO » 19. Dec 2023, 08:31

Moin

ich habe nie mit den Bedingungen gearbeitet, da ich es übersichtlicher finde möglichst alles im Paket selber abzufangen. Deshalb sorry wenn ich da jetzt was falsch deute...

Wenn ich das richtig verstehe ist dies doch eine Bedingung FÜR eine Installation, die also erfüllt sein muss, damit das Paket installiert. Müsste der Operator dann nicht "kleiner als" sein?

matzef
Posts: 2
Joined: 11. Sep 2019, 16:19
Contact:

Re: WMI Abfrage einer Treiber Version "Größer als oder gleich"

Post by matzef » 30. Jul 2024, 11:42

Moin :)
hatte das gleiche Problem, habe jetzt einmal genau nachgelesen und wenn ich das richtig verstanden habe, dann sollst du dich nur auf die Major & die Minor Version beziehen, das kann er dann auch vergleichen, in deinem Fall dann 31.0

Grüße

Gladop
Posts: 24
Joined: 27. Apr 2022, 16:49
Contact:

Re: WMI Abfrage einer Treiber Version "Größer als oder gleich"

Post by Gladop » 08. Aug 2024, 16:13

Moin zusammen,

ich hab das Projekt jetzt endlich wieder aufnehmen können.
Bisher hatten wir einfach eine Zuweisungsgruppe mit allen PCs, die diesen Treiber erhalten sollten.

@SRO
Die WMI Abfrage habe ich unter dem Reiter "Bereits installiert" erstellt.
Sprich Ist die Version größer als oder gleich installiere das Paket nicht, da es bereits installiert ist.

@matzef
Leider kann ich mit WMI nur die ganze Version auslesen.
Anders als bei SQL kann ich in der Abfrage nicht das Ergebnis bearbeiten.

Ich habe es jetzt wie folgt gelöst.
Mittels WMI Abfrage unter den Vorbedingungen wird überprüft ob in dem Computer eine unterstützte Grafikkarte steck.
(Welche Karten unterstützt werden, steht in der ListDevices.txt wenn der Treiber entpackt wird)
  • WMI-Abfrage: SELECT Name FROM Win32_VideoController where Caption like "%NVIDIA%"
  • Wert: z.B. Quadro
Das Paket wird dann überall ausgeführt.
Im Paket selbst überprüfe ich welche Treiber Version installiert ist.
  • Das Skrip "Installierte_Treiberversion.ps1" wird ausgeführt und schreibt die Version ohne Punkte in eine .txt.
    (Der gleiche Befehl in Matrix selbst konnte nicht ausgeführt werden)
  • Mit ReadTextFile lese ich den Inhalt in eine Variable ein
  • Die Variable kann ich dann vergleichen. (ohne Punkte)
    Ist eine ältere Version installiert, startet die Installation
    Ist die gleiche oder eine neuere Version des Treibers installiert, wird die Installation beendet, als erfolgreich gewertet und ein entsprechender Eintrag wird ins Log geschrieben.
Installierte_Treiberversion.ps1

Code: Select all

Get-wmiObject -Query 'SELECT DriverVersion FROM Win32_VideoController where Caption like "%NVIDIA%"' | foreach {$_.DriverVersion.Remove(0,6).Replace(".","")} | Out-File -FilePath "C:\Windows\temp\NVIDIA_DriverVersion.txt" -NoNewline
setup.inf

Code: Select all

[Set:CheckInstalledDriver]
CallHidden powershell.exe -file "%SRC%\Installierte_Treiberversion.ps1" -SilentMode "YES"
Set InstaledDriverVersion=ReadTextFile ("C:\Windows\temp\NVIDIA_DriverVersion.txt")
If "%InstaledDriverVersion%" < "55286" Then "Set:Installation" Else "Set:AllreadyInstalled" EndIf

[Set:Installation]
AddMeter -1
Call cmd.exe /c msg * "Grafikkartentreiber-Installation. Bitte warten bis die Installation abgeschlossen ist. Während der Installation kann der Bildschirm kurzzeitig schwarz werden."
Call "%Src%\setup.exe" -n -s
If "%ErrorLevel%" <> "0" Then "SET:InstallationError" EndIf

[Set:InstallationError]
ErrorLogMsg %ErrorText% %ErrorLevel% %CallingText% setup.exe
Abort

[Set:AllreadyInstalled]
Exit "Ein Nvidia Treiber mit der Version 552.86 oder aktueller ist bereits installiert. Installation wird als erfolgreich gewertet."
Wenn noch jemand einen Tipp zum verbessern hat, immer her damit. :D

Grüße
Gladop

Post Reply

Return to “Software Management”

Who is online

Users browsing this forum: No registered users and 5 guests