Исключение цитат и двойных кавычек
Я новичок в Powershell... и мне было интересно, как я уверенно скрываю кавычки в значении -param.
$cmd="\\server\toto.exe -batch=B -param="sort1;parmtxt='Security ID=1234'""
Invoke-Expression $cmd
Это, конечно, не удается, я пытался избежать кавычек (одиночный и двойной) с помощью escape-символа `и выполнял различную комбинацию, но ничего не работает. Пожалуйста, помогите
Ответы
Ответ 1
Параметры экранирования, как правило, являются источником разочарования и очень похожи на время, потраченное впустую. Я вижу, что вы на v2, поэтому я бы предложил использовать технику, которую Джоэл "Jaykul" Bennet написал в блоге около того
Короче говоря: вы просто завершаете строку с помощью @'...' @:
Start-Process \\server\toto.exe @'
-batch=B -param="sort1;parmtxt='Security ID=1234'"
'@
(помните, что я предполагал, какие цитаты нужны, и какие вещи вы пытались убежать)
Если вы хотите работать с выходом, вы можете добавить -NoNewWindow-переключатель.
Кстати: это была настолько важная проблема, что с v3 вы можете использовать --%
, чтобы остановить синтаксический анализатор PowerShell от каких-либо действий с вашими параметрами:
\\server\toto.exe --% -batch=b -param="sort1;paramtxt='Security ID=1234'"
... должен хорошо работать там (с тем же предположением).
Ответ 2
Использование backtick (`) отлично подходит для меня, если я помещаю их в следующие места:
$cmd="\\server\toto.exe -batch=B -param=`"sort1;parmtxt='Security ID=1234'`""
$cmd
возвращается как:
\\server\toto.exe -batch=B -param="sort1;parmtxt='Security ID=1234'"
Это то, что вы искали?
Ошибка Powershell дала мне ссылку на неожиданный токен 'sort1', что я определил, куда поместить обратные выходы.
Синтаксис @'...' @называется "здесь строка" и вернет точно, что введено. Вы также можете использовать их для заполнения переменных следующим образом:
[email protected]'
"\\server\toto.exe -batch=B -param="sort1;parmtxt='Security ID=1234'""
'@
Символы открытия и закрытия должны быть в отдельной строке, как показано выше.
Ответ 3
Сегодня я оказался в подобном затруднительном положении, пытаясь запустить команду через модуль nodejs:
Я использовал PowerShell и пытался запустить:
command -e 'func($a)'
Но с дополнительными символами PowerShell искажал аргументы. Чтобы исправить, я возвращаю метки с двойными кавычками:
command -e `"func($a)`"
Я надеюсь, что это поможет кому-то.