Powershell: правильно избегать апострофов

405
Bowi

Я хочу выполнить команду из powershell, которая, в свою очередь, выполняет команду на стороннем сервере, используя plink. Но это работает, только если у меня нет 'или "в команде, иначе Powershell подключается и печатает исключения.

Пример:

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

дает

well... hello 

, Но что, если я хочу, чтобы повторить как 'и ", скажем ,

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

получить

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

?

Изменить: Расширение, я хочу иметь $.

well... hello, my "friend" 'brutus', you $insult! 
2
Попробуйте экранировать с помощью обратной черты так (`), которая является той же клавишей, что и тильда (~) на клавиатуре. Или даже попробуйте удвоить одинарные кавычки. Читайте здесь, чтобы узнать подробности, которые могут быть вам полезны: http://www.rlmueller.net/PowerShellEscape.htm Pimp Juice IT 6 лет назад 1
Вы используете неправильный командлет, чтобы сделать работу. [`Invoke-Expression`] (https://msdn.microsoft.com/powershell/reference/5.1/microsoft.powershell.utility/Invoke-Expression) следует использовать для выполнения локальной команды (код PowerShell). Если вы хотите запустить исполняемый файл, просто сделайте это. Возможно, стоит рассмотреть возможность использования одного из параметров, перечисленных в [Как запустить EXE-файл в PowerShell с параметрами с пробелами и кавычками] (https://stackoverflow.com/questions/1673967/how-to-run-an-exe-file-in -powershell-с параметрами-с-пространств-и-кавычки) Seth 6 лет назад 0
Несмотря на то, что оба ваших предложения хороши, для меня это стало беспорядочным, когда дело доходит до запуска `awk` с его (даже для себя) почти нечитаемыми командными строками. В итоге я упаковал команды в скрипт и загрузил их с помощью `pscp` и запустил с помощью` plink`. Bowi 6 лет назад 0

1 ответ на вопрос

0
Bowi

Для полноты, это команда для ответа, который я просил:

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

Это привносит

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