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!

1
Спробуйте втекти за допомогою клавіші backtick так (`), яка є тією ж клавішею, що і тильда (~) на клавіатурі. Або ж спробуйте подвоїти одиничні цитати. Прочитайте тут подробиці, які також можуть бути вам корисними: rlmueller.net/PowerShellEscape.htm
Pimp Juice IT

Ви використовуєте неправильний командлет для виконання роботи. Invoke-Expressionслід використовувати для виконання локальної команди (код PowerShell). Якщо ви хочете запустити виконуваний файл, просто зробіть це. Можливо, подумайте про використання одного з параметрів, перелічених у розділі Як запустити EXE-файл у PowerShell з параметрами з пробілами та лапками
Seth

Незважаючи на те, що обидві ваші пропозиції є чудовими, він зміг захарастити мене, коли справа доходить до awkйого (навіть для себе) майже нечитабельних командних рядків. Тож я закінчив упакувати команди в скрипт і завантажити його разом із ним pscpі запустити його plink.
Бові

Відповіді:


0

Для повноти це команда для відповіді, яку я попросив:

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

Це приносить

well...
Hello, my "friend" 'brutus', you $insult!
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.