Wie kann ich die Anführungszeichen im -param
Wert in der folgenden Befehlszeile ordnungsgemäß umgehen ?
$cmd="\\server\toto.exe -batch=B -param="sort1;parmtxt='Security ID=1234'""
Invoke-Expression $cmd
Das scheitert natürlich. Ich habe versucht, die Anführungszeichen (einfach und doppelt) mit dem Escape-Zeichen `zu umgehen und habe verschiedene Kombinationen durchgeführt, aber nichts funktioniert.
powershell-2.0
Eetawil
quelle
quelle
$someCommandStringWithDoubleQuotes | cmd
. Dies funktioniert tatsächlich mit PowerShell-Skripten (z. B. Aufrufen von CMake (dies erfordert doppelte Anführungszeichen (andernfalls schlägt dies stillschweigend fehl))). Eine Alternative zu CMD ist bash.exe ( MinGW ) - unter bestimmten Umständen kann der Start jedoch sehr, sehr langsam sein.Antworten:
Das Entkommen solcher Parameter ist normalerweise eine Quelle der Frustration und fühlt sich sehr nach Zeitverschwendung an. Ich sehe, dass Sie auf v2 sind, also würde ich vorschlagen, eine Technik zu verwenden, die Joel "Jaykul" Bennet vor einiger Zeit gebloggt hat .
Lange Rede, kurzer Sinn: Sie wickeln Ihre Zeichenfolge einfach mit @ '...' @:
(Beachten Sie, dass ich davon ausgegangen bin , welche Anführungszeichen benötigt werden und welchen Dingen Sie entkommen wollten.) Wenn Sie mit der Ausgabe arbeiten möchten, möchten Sie möglicherweise den
-NoNewWindow
Schalter hinzufügen .Übrigens: Dies war ein so wichtiges Problem, dass Sie seit Version 3
--%
den PowerShell-Parser daran hindern können , irgendetwas mit Ihren Parametern zu tun:... sollte dort gut funktionieren (mit der gleichen Annahme).
quelle
@"
und"@
verwenden.Die Verwendung des Backticks (`) funktioniert für mich einwandfrei, wenn ich sie an folgenden Stellen platziere:
$cmd
gibt zurück als:Haben Sie danach gesucht?
Der Fehler, den PowerShell mir gab, bezog sich auf ein unerwartetes Token 'sort1', und so bestimmte ich, wo die Backticks abgelegt werden sollten.
Die @ '...' @ -Syntax wird als "here string" bezeichnet und gibt genau das zurück, was eingegeben wurde. Sie können sie auch verwenden, um Variablen auf folgende Weise zu füllen:
Die Öffnungs- und Schließsymbole müssen wie oben gezeigt in einer eigenen Zeile stehen.
quelle
Invoke-Expression
die doppelten Anführungszeichen nicht entfernt,$cmd
wenn sie aufgerufen werden? Oder wie haben Sie$cmd
ohne verwendetInvoke-Expression
?Ich befand mich heute in einer ähnlichen Situation, als ich versuchte, einen Befehl über ein Node.js-Modul auszuführen:
Ich habe die PowerShell verwendet und versucht, Folgendes auszuführen:
Aber mit den zusätzlichen Symbolen hat PowerShell die Argumente entstellt. Um dies zu beheben, habe ich die doppelten Anführungszeichen zurückgesetzt:
quelle
"['`"][^'`"]['`"]"
funktioniert… aber'[`'"][^`'"][`'"]'
nicht! hat mich verrückt gemacht