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-Key: 3406071827

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

Printed on: April 27, 2024 at 12:04 o'clock

Member: SlainteMhath
SlainteMhath Feb 15, 2024 at 10:55:05 (UTC)
Goto Top
Moin,

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

lg,
Slainte
Mitglied: 11078840001
Solution 11078840001 Feb 15, 2024 updated at 11:03:19 (UTC)
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.
Member: MarciMarc85
MarciMarc85 Feb 15, 2024 at 11:04:12 (UTC)
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!
Member: MarciMarc85
MarciMarc85 Feb 15, 2024 at 12:21:06 (UTC)
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
Mitglied: 11078840001
11078840001 Feb 15, 2024 updated at 13:42:00 (UTC)
Goto Top
&".\Apptausch_$version.ps1" $parameter1 $parameter2  
oder auch
start-process Powershell  -Argumentlist "-file `".\Apptausch_$version.ps1`" $parameter1 $parameter2"  
Member: MarciMarc85
MarciMarc85 Feb 15, 2024 at 12:36:44 (UTC)
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?
Mitglied: 11078840001
11078840001 Feb 15, 2024 updated at 12:46:28 (UTC)
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 ...
Member: MarciMarc85
MarciMarc85 Feb 15, 2024 at 12:57:10 (UTC)
Goto Top
funktioniert nur so, ansonsten wird der Pfad eine ebene höher abgefragt
\d+\.\d+\.\d+(\.\d+)?(\.\d+)?
Mitglied: 11078840001
11078840001 Feb 15, 2024 updated at 13:28:11 (UTC)
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.