Я хочу виконати команду з 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
Ви використовуєте неправильний командлет для виконання роботи.
—
Seth
Invoke-Expression
слід використовувати для виконання локальної команди (код PowerShell). Якщо ви хочете запустити виконуваний файл, просто зробіть це. Можливо, подумайте про використання одного з параметрів, перелічених у розділі Як запустити EXE-файл у PowerShell з параметрами з пробілами та лапками
Незважаючи на те, що обидві ваші пропозиції є чудовими, він зміг захарастити мене, коли справа доходить до
—
Бові
awk
його (навіть для себе) майже нечитабельних командних рядків. Тож я закінчив упакувати команди в скрипт і завантажити його разом із ним pscp
і запустити його plink
.