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

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

Printed on: April 25, 2024 at 00:04 o'clock

Member: NetzwerkDude
NetzwerkDude Jan 24, 2019 updated at 11:45:49 (UTC)
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
Member: colinardo
colinardo Jan 24, 2019 updated at 11:46:51 (UTC)
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
Member: H41mSh1C0R
H41mSh1C0R Jan 24, 2019 at 11:46:03 (UTC)
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>
Member: H41mSh1C0R
H41mSh1C0R Jan 24, 2019 updated at 11:49:45 (UTC)
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
Member: colinardo
Solution colinardo Jan 24, 2019 updated at 11:57:48 (UTC)
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'"
Member: H41mSh1C0R
H41mSh1C0R Jan 24, 2019 at 11:57:03 (UTC)
Goto Top
*geduckt von dannen zieh*

danköö
Member: colinardo
colinardo Jan 24, 2019 updated at 12:00:19 (UTC)
Goto Top
Zitat von @H41mSh1C0R:

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