h41msh1c0r
Goto Top

Powershell Escapen in der Kommandozeile

Aloa,

ich steh grad irgendwie auf dem Schlauch:

Powershell ${env:CommonProgramFiles(x86)}

liefert mir "C:\Program Files (x86)\Common Files", soweit so gut.

Jetzt brauch ich aber den Pfad als Parameter inkl. dem Rest vom Pfad.

Tenor im Netz lautet: Umgebungsvariable auflösen und Pfad zusammenbauen, fertisch.

${env:CommonProgramFiles(x86)}\Ordner\Unteordner\Script.ps1

Egal wie ich das Klammer und mit welchen " oder ` oder ' er bringt "unerwartetes Token.

Auch wenn ich das gesammte nochmal mit ${ } geklammert habe mag das nicht.

Hat einer einen Tipp?

VG

Content-ID: 399274

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

Ausgedruckt am: 04.12.2024 um 08:12 Uhr

NetzwerkDude
NetzwerkDude 24.01.2019 aktualisiert um 12:45:49 Uhr
Goto Top
Die beiden Strings concaten?
"$env:CommonProgramFiles(x86)"+"\Ordner\Unteordner\Script.ps1"  
liefert bei mir:
C:\Program Files\Common Files(x86)\Ordner\Unteordner\Script.ps1
colinardo
colinardo 24.01.2019 aktualisiert um 12:46:51 Uhr
Goto Top
Wenn du das Skript gleich in der PS ausführen willst
&"${env:CommonProgramFiles(x86)}\Ordner\Unteordner\Script.ps1"
oder
. "${env:CommonProgramFiles(x86)}\Ordner\Unteordner\Script.ps1"

Grüße Uwe
H41mSh1C0R
H41mSh1C0R 24.01.2019 um 12:46:03 Uhr
Goto Top
leider ebenso nicht:

C:\Windows\System32\WindowsPowerShell\v1.0>powershell.exe "env:CommonProgramFiles(x86)"+"\enteo\Service\script.ps1"  
x86 : Die Benennung "x86" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren  
Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und
wiederholen Sie den Vorgang.
In Zeile:1 Zeichen:24
+ env:CommonProgramFiles(x86)+\enteo\Service\script.ps1
+                        ~~~
    + CategoryInfo          : ObjectNotFound: (x86:String) , CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException


C:\Windows\System32\WindowsPowerShell\v1.0>
H41mSh1C0R
H41mSh1C0R 24.01.2019 aktualisiert um 12:49:45 Uhr
Goto Top
Hallo Uwe,

C:\Windows\System32\WindowsPowerShell\v1.0>powershell.exe &"${env:CommonProgramFiles(x86)}\enteo\Service\script.ps1"  
Windows PowerShell
Copyright (C) 2016 Microsoft Corporation. Alle Rechte vorbehalten.

PS C:\Windows\System32\WindowsPowerShell\v1.0>

Bei der Variante macht er mir nur eine Shell auf, führt allerdings das Script nicht aus. Oder führt er es schon aus, nur wird die GUI unterdrückt?

Das Script öffnet eine Out-GridView mit vorher eingesammelten Daten.

Wenn ich das direkt starte aus einem Pfad ohne Leerzeichen und Klammern läufts.

VG
colinardo
Lösung colinardo 24.01.2019 aktualisiert um 12:57:48 Uhr
Goto Top
Falsch!

Bei Leerzeichen im Pfad von der Batch aus musst du aufpassen
powershell -Command "&"${env:CommonProgramFiles(x86)}\enteo\Service\script.ps1""  

Ich zitiere noch mal aus meiner Anleitung:

back-to-topStarten von PS-Scripten aus Batch und Kommandozeilen heraus:
Hier gibt es unterschiedliche Methoden, je nach Anforderungen gibt es hier einige Besonderheiten vor allem bei Leerzeichen in Pfaden zu beachten!
Der einfachste Aufruf sieht hier so aus:
powershell.exe -File "C:\Pfad\Script.ps1"
Wenn man dem Script Parameter übergeben möchte:
powershell.exe -File "C:\Pfad\Script.ps1" "Parameter 1" "Parameter 2"
Wenn man "benannte" Parameter übergeben möchte (die einfachen Hochkommas um den Scriptpfad werden benötigt wenn er Leerzeichen beinhaltet):
powershell.exe -command "&'C:\Pfad\Script.ps1' -par1 'Wert1' -par2 'Wert2'"
Man kann auch mehrere Scripte hintereinander ausführen lassen:
powershell.exe -command "&'C:\Pfad\Script1.ps1';&'C:\Pfad\Script2.ps1'"
H41mSh1C0R
H41mSh1C0R 24.01.2019 um 12:57:03 Uhr
Goto Top
*geduckt von dannen zieh*

danköö
colinardo
colinardo 24.01.2019 aktualisiert um 13:00:19 Uhr
Goto Top
Zitat von @H41mSh1C0R:

*geduckt von dannen zieh*
Wohl denn, Gefährte, mögen sie ziehen ohne Schmerz des hinteren Leibes face-smile.