marcimarc85
Goto Top

Teil eines Windows Pfades als Variable nutzen

Ich möchte mittesl Powershell Script eine Citrix Veröffentlichung durch eine neu Version ersetzen. Dazu hab ich bereits ein Script, in dem ich die aktuelle Version und die neue Version per Hand in eine Variable eintrage und das Script tauscht sozusagen die Veröffentlichungen.

Nun möchte ich das ganze gern noch mehr automatisieren. Dazu muss ein neues Script die alkter Version des Programms automatisch erkennen und in die Variable schreiben: Das sollte kein Problem sein, denn die Versionsnummer steht im Ornernamen. Nur wie extrahiere ich diese und packe sie in eine neue Variable?

Ich frage die aktuell installierte Version ab mit

(Get-BrokerApplication -CommandLineExecutable "D:\software\tools\bin\Client_Tool\*")  

Nun bekomme ich alle möglichen Citrix Parameter angezeigt. Für mich interessant ist "WorkingDirectory"

WorkingDirectory                 : D:\software\tools\bin\Client_Tool\Client-5.25.31-x64\bin

Ich benötige jetzt lediglich die 5.25.31 in einer Variablen.

Content-ID: 3406071827

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

Ausgedruckt am: 25.11.2024 um 06:11 Uhr

SlainteMhath
SlainteMhath 15.02.2024 um 11:55:05 Uhr
Goto Top
Moin,

quick and dirty...
$Version=(Get-BrokerApplication -CommandLineExecutable "D:\software\tools\bin\Client_Tool\*").WorkingDirectory.substring(42,7)  

lg,
Slainte
11078840001
Lösung 11078840001 15.02.2024 aktualisiert um 12:03:19 Uhr
Goto Top
[version]$version = [regex]::match((Get-BrokerApplication -CommandLineExecutable "D:\software\tools\bin\Client_Tool\*").WorkingDirectory,'\d+\.\d+\.\d+').Value  
oder
[version]$version = ((Get-BrokerApplication -CommandLineExecutable "D:\software\tools\bin\Client_Tool\*").WorkingDirectory -split '-')[1]  
Usw.
MarciMarc85
MarciMarc85 15.02.2024 um 12:04:12 Uhr
Goto Top
Zitat von @11078840001:

[version]$version = [regex]::match((Get-BrokerApplication -CommandLineExecutable "D:\software\tools\bin\Client_Tool\*").WorkingDirectory,'\d+\.\d+\.\d+').Value  

Danke. Das liefert das gewünsche Ergebnis!
MarciMarc85
MarciMarc85 15.02.2024 um 13:21:06 Uhr
Goto Top
eine Frage noch:

Wenn ich das Script jetzt starten will mit

.\Apptausch_+$version+.ps1 $parameter1 $parameter2
bekomme ich eine Fehlermeldung. Wenn ich anstatt der variable den Variablenwert eintage, funktionierts, aber das ist ja nicht Zielfpürend, da sich dir Variable ja immer ändert.

.\Apptausch_5.25.31.ps1 : Die Benennung ".\Apptausch_5.25.31.ps1" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms   
erkannt
11078840001
11078840001 15.02.2024 aktualisiert um 14:42:00 Uhr
Goto Top
&".\Apptausch_$version.ps1" $parameter1 $parameter2  
oder auch
start-process Powershell  -Argumentlist "-file `".\Apptausch_$version.ps1`" $parameter1 $parameter2"  
MarciMarc85
MarciMarc85 15.02.2024 um 13:36:44 Uhr
Goto Top
Zitat von @11078840001:

[version]$version = [regex]::match((Get-BrokerApplication -CommandLineExecutable "D:\software\tools\bin\Client_Tool\*").WorkingDirectory,'\d+\.\d+\.\d+').Value  

Was mir hierbei noch aufgefallen ist, bei Versionen mit 4 Versionsnummern (Bsp.: 5.25.31.2) werden nur die ersten 3 Versionsteile angezeigt, sprich 5.25.31. Mir ist klar, dass ich das um .\d+ erweitern muss, was auch funktioniert. Aber bekomme ich eine Fehlermeldung, wenn dann irghendwann nur wieder eine "dreistellige" Version gefunden wird?
11078840001
11078840001 15.02.2024 aktualisiert um 13:46:28 Uhr
Goto Top
Den Regex so anpassen
\d+\.\d+(\.\d+)?(\.\d+)?
Dann kann die Version 2stellig 3stellig oder 4stellig sein, ...
RTFM

https://tio.run/##K8gvTy0qzkjNyfn/X91Qz0hdB0TqGcNoPRN1hRoF1WouBSCILkpNT6 ...
MarciMarc85
MarciMarc85 15.02.2024 um 13:57:10 Uhr
Goto Top
funktioniert nur so, ansonsten wird der Pfad eine ebene höher abgefragt
\d+\.\d+\.\d+(\.\d+)?(\.\d+)?
11078840001
11078840001 15.02.2024 aktualisiert um 14:28:11 Uhr
Goto Top
Zitat von @MarciMarc85:

funktioniert nur so, ansonsten wird der Pfad eine ebene höher abgefragt
\d+\.\d+\.\d+(\.\d+)?(\.\d+)?

Wir kennen ja deine Ordnerstruktur hier nich und was da sonst noch steht..., siehe Demo works as designed 😉
Und RTFM für den Rest 🐟

Ich würde mich je eher auf Dateiversionen selbst verlassen als irgendwelche Pfade abzuparsen. Versionsinfos bekommst du ganz einfach mit Get-Item aus Dateien.