Подтвердить что ты не робот

Исключение цитат и двойных кавычек

Я новичок в Powershell... и мне было интересно, как я уверенно скрываю кавычки в значении -param.

$cmd="\\server\toto.exe -batch=B -param="sort1;parmtxt='Security ID=1234'""
Invoke-Expression $cmd 

Это, конечно, не удается, я пытался избежать кавычек (одиночный и двойной) с помощью escape-символа `и выполнял различную комбинацию, но ничего не работает. Пожалуйста, помогите

4b9b3361

Ответ 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)`"

Я надеюсь, что это поможет кому-то.