Powershell: Apostrophe richtig entkommen

499
Bowi

Ich möchte einen Befehl von Powershell ausführen, der wiederum einen Befehl auf einem fremden Server ausführt plink. Das funktioniert aber nur, wenn ich nicht 'oder "im Befehl habe, sonst springt Powershell ein und druckt Ausnahmen.

Beispiel:

Invoke-Expression "$plinkPath -ssh $username@$host 'echo well...; echo hello'" 

gibt

well... hello 

. Aber was ist, wenn ich sowohl Echo 'als "auch sagen möchte

Invoke-Expression "$plinkPath -ssh $username@$host 'echo well...; echo hello, my "friend" 'brutus'!'" 

bekommen

well... hello, my "friend" 'brutus'! 

?

Edit: Erweiterung, ich möchte eine haben $.

well... hello, my "friend" 'brutus', you $insult! 
2
Versuchen Sie, mit dem Backtick zu entkommen, also (`). Dies ist dieselbe Taste wie die Tilde (~) auf der Tastatur. Oder versuchen Sie tatsächlich, die einzelnen Zitate zu verdoppeln. Lesen Sie hier die Details, die Sie möglicherweise hilfreich finden: http://www.rlmueller.net/PowerShellEscape.htm Pimp Juice IT vor 6 Jahren 1
Sie verwenden das falsche Cmdlet, um den Job auszuführen. [`Invoke-Expression`] (https://msdn.microsoft.com/powershell/reference/5.1/microsoft.powershell.utility/Invoke-Expression) sollte zum Ausführen eines lokalen Befehls (PowerShell-Code) verwendet werden. Wenn Sie eine ausführbare Datei ausführen möchten, tun Sie dies einfach. Erwägen Sie möglicherweise die Verwendung einer der Optionen unter [So führen Sie eine EXE-Datei mit Parametern mit Leerzeichen und Anführungszeichen in PowerShell aus] (https://stackoverflow.com/questions/1673967/how-to-run-an-exe-file-in -powershell-with-parameters-with-spaces-and-quotes) Seth vor 6 Jahren 0
Während beide Vorschläge in Ordnung sind, ist es für mich viel unübersichtlich, wenn es darum geht, "awk" mit seinen (selbst für sich) fast unlesbaren Befehlszeilen auszuführen. Also packte ich die Befehle in ein Skript und lud das mit "pscp" hoch und ließ es mit "plink" laufen. Bowi vor 6 Jahren 0

1 Antwort auf die Frage

0
Bowi

Der Vollständigkeit halber ist dies der Befehl für die Antwort, nach der ich gefragt habe:

& $plinkPath -ssh $username@$host "echo well...; echo Hello, my \\\`"friend\\\`" \'brutus\', you \`$insult!" 

Es bringt

well... Hello, my "friend" 'brutus', you $insult!