marcimarc85
Goto Top

Powershell Versionsnummer aus Pfad extrahieren und als Variable nutzen

Hallo,

ich möchte gern die versionsnummer einer Softwareinstallation aus dem Installationspfad extrahieren und als Variable nutzen.
Dazu frage ich mit Powershell und dem Befehl:

Get-WmiObject win32_service | ?{$_.Name -like 'Programmname*'} | select Name, DisplayName, State, PathName  

Den Pfad zur ausführbaren Datei des Dienstes ab und erhate folgendes Ergebnis:

Name                    DisplayName             State   PathName                                                                                                                  
----                    -----------             -----   --------                                                                                                                  
Programmname-MySQL57         Programmname-MySQL57         Running D:\Programmname\3rdparty\mysql-5.7.17-winx64\bin\mysqld --defaults-file=d:\..\my-rs-57.ini MySQL57
Programmname Server          Programmname Server          Running D:/../Programmname-Server-x.x.x-x64/bin/Programmname_server.exe                                               
Programmname MUServer Programmname MUServer Running D:/../bin/Programmname-Server-x.x.x-x64/bin/mu_server.exe                                             
Programmname ExportSrvc  Programmname ExportSrvc  Stopped D:/../bin/Programmname-Server-x.x.x-x64/bin/ExportService.exe   

Jetzt möchte ich daraus einmalig die Versionsnummer, in dem Fall 12.5.30 extrahieren und als Variable definieren.
Kann mir dabei jemand helfen? Die Anzahl und namen der Dienste Variieren, weshalb ich nach Programmname* suchen muss. Programmname ist jedem Dienst der Software vorangestellt.

Content-Key: 441081

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

Ausgedruckt am: 28.03.2024 um 16:03 Uhr

Mitglied: 139374
Lösung 139374 15.04.2019 aktualisiert um 12:03:46 Uhr
Goto Top
Moin.
Get-WmiObject win32_service | ?{$_.Name -like 'Programmname*' -and $_.Pathname -match '-([\d\.]+)-'} | select Name, DisplayName, State, PathName,@{n='Version';e={$matches[1]}}  
Ciao.
Mitglied: MarciMarc85
MarciMarc85 15.04.2019 aktualisiert um 13:55:58 Uhr
Goto Top
Danke . Das hat mir seh geholfen.

Hänge ich an Dein Kommando noch

| select Version

an, so bekomme ich dann als Ausgabe

Version
-------
5.7.17 
12.5.31
12.5.31
12.5.31

Wie bekomme ich jetzt den letzten Eintrag extrahiert?
Sodass ich nur 12.5.31 rausbekomme und das in eine Variable packen kann?

Zur sicherheit sollte auch die 5.7.17 rausgefiltert werden. Das ist die MySQL Version. Kann ich in die Abfrage noch irgendwie ein
-exclude 'MySQL*'  
mit einbauen, sodass es bei der versionsabfrage garnich erst mit aufgelistet wird?


Sorry, aber muss mich in Powershell erst ein wenig einlesen.
Mitglied: 139374
Lösung 139374 15.04.2019 aktualisiert um 14:17:48 Uhr
Goto Top
$v = Get-WmiObject win32_service | ?{$_.Name -like 'Programmname*' -and $_.Name -notlike '*MySQL*' -and $_.Pathname -match '-([\d\.]+)-'} | select Name, DisplayName, State, PathName,@{n='Version';e={$matches[1]}} | Sort Version -Desc | select -Expand Version -first 1  
$v
Mitglied: MarciMarc85
MarciMarc85 15.04.2019 um 14:23:21 Uhr
Goto Top
Perfekt!!!!
Vielen Dank.

Das
not like

muss nur

-notlike

geschrieben werden. Ich danke Dir !!!
Mitglied: 139374
139374 15.04.2019 aktualisiert um 14:46:27 Uhr
Goto Top
Zitat von @MarciMarc85:
muss nur

-notlike

geschrieben werden. Ich danke Dir !!!
Das war die Smartphone Idioten Autokorrektur beim Programmieren produziert die halt nur Müll 😎.