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

2

Я хочу выполнить команду из 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!
Bowi
источник
1
Попробуйте экранировать с помощью обратной черты так (`), которая является той же клавишей, что и тильда (~) на клавиатуре. Или даже попробуйте удвоить одинарные кавычки. Читайте здесь, чтобы узнать подробности, которые также могут быть вам полезны: rlmueller.net/PowerShellEscape.htm
Pimp Juice IT
Вы используете неправильный командлет, чтобы сделать работу. Invoke-Expression должен использоваться для выполнения локальной команды (код PowerShell). Если вы хотите запустить исполняемый файл, просто сделайте это. Возможно рассмотрите возможность использования одного из вариантов, перечисленных в Как запустить EXE-файл в PowerShell с параметрами с пробелами и кавычками
Seth
В то время как оба ваши предложения в порядке, для меня это стало беспорядочным awk с его (даже для себя) почти нечитаемыми командными строками. В итоге я упаковал команды в скрипт и загрузил их с pscp и запустить его с plink,
Bowi

Ответы:

0

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

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

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

well...
Hello, my "friend" 'brutus', you $insult!
Bowi
источник