Sprachzeichen „“ können mit RunProgram nicht in PowerShell analysiert werdenHallo, ich habe Probleme mit der Ausführung von Powershell, zum Beispiel:
cmd = EvalInsert(
"\[$imageFile = "test"]\");
rp1 = RunProgram(Executable("C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" ),
Options(Eval(cmd)),
ReadFunction("text")
);Das eigentliche Cmd, das ich verwenden möchte, ist komplexer, hat aber das gleiche Problem mit Sprachzeichen. Das Drucken von rp1 im Protokoll ergibt:
"test : The term 'test' is not recognized as the name of a cmdlet, function, script file, or operable program. Check
the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:14
+ $imageFile = test
+ ~~~~
+ CategoryInfo : ObjectNotFound: (test:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
" Das bedeutet, dass die Zeile ohne Sprachzeichen ausgeführt wurde.
Wie stelle ich sicher, dass Sprachmarken korrekt ausgeführt werden?
Vielen Dank im Voraus für jede Hilfe hierzu.
Betreff: Anführungszeichen "" können mit RunProgram nicht in Powershell analysiert werdenBin gerade über eine tolle Erklärung zur Windows-Befehlszeile, zu Anführungszeichen und Escape-Zeichen gestolpert und warum das so schwierig scheint.
http://www.windowsinspired.com/the-correct-way-to-quote-command-line-arguments/
http://www.windowsinspired.com/understanding-the-command-line-string-and-arguments-received-by-a-windows-program/
http://www.windowsinspired.com/how-a-windows-programs-splits-its-command-line-into-individual-arguments/
Stark vereinfacht: Mehrere Argumente in einer Befehlszeile werden durch Leerzeichen getrennt. Jedes Anführungszeichen schaltet um, ob Leerzeichen zur Trennung von Argumenten verwendet werden. \\ ist ein Literal \ und \" ist ein Literal ". Zwei nebeneinander liegende Anführungszeichen ergeben bei ausgeschalteten Leerzeichen ein Literal ", aber die Leerzeichen können je nach verwendeter Parservariante ein- oder ausgeschaltet sein.
Update 20.01.2025: Die Links sind veraltet, Webarchiv-Versionen:
http://web.archive.org/web/20220629215303/http://windowsinspired.com/the-correct-way-to-quote-command-line-arguments/
https://web.archive.org/web/20220629212707/https://www.windowsinspired.com/understanding-the-command-line-string-and-arguments-received-by-a-windows-program/
https://web.archive.org/web/20220629212422/https://www.windowsinspired.com/how-a-windows-programs-splits-its-command-line-into-individual-arguments/
Betreff: Sprachzeichen „“ können mit RunProgram nicht in PowerShell analysiert werdenDas Befehlszeilenargument benötigt einige zusätzliche Anführungszeichen und Escapezeichen, damit die Powershell-Befehlszeilenanalyse funktioniert. (Dies ist das zweite Mal, dass ich Powershell verwende. Möglicherweise übersehe ich etwas ...) (Außerdem ist die Syntaxfärbung dieser Webseite für die Escape-Anführungszeichen in eckigen Klammern falsch.)
command = "\["$imagefile = \"test\";echo $imagefile"]\";
Write( "\!nthe command is:", command ); // write shows it in the log without extra escapes
result = RunProgram(
executable( "powershell.exe" ), //
options( command ), //
readfunction( "text" )//
);
Show( result );
Der Befehl lautet:"$imagefile = \"test\";echo $imagefile"
result = "test
";
Hier ist ein Screenshot von zwei Versuchen, die ich in einem CMD-Fenster gemacht habe.
powershell output in a CMD windowpowershell output in a CMD windowpowershell output in a CMD windowPowershell-Ausgabe in einem CMD-Fenster
Die äußeren Anführungszeichen sorgen dafür, dass Powershell eine einzige Option sieht. Die äußeren Anführungszeichen werden von CMD entfernt, bevor Powershell den Text erhält. In Ihrem ursprünglichen Beispiel wurden drei Elemente von Powershell empfangen ($imagefile, =, test) und die äußeren Anführungszeichen um test wurden von CMD entfernt. Die äußeren Anführungszeichen werden benötigt, wenn die Argumente Anführungszeichen oder Leerzeichen enthalten.