How do I properly escape the quotes in the
-param value in the following command line?
$cmd="\\server\toto.exe -batch=B -param="sort1;parmtxt='Security ID=1234'"" Invoke-Expression $cmd
This of course fails. I tried to escape the quotes (single and double) using the escape character ` and did various combination, but nothing is working.
This question is tagged with
~ Asked on 2013-08-08 00:50:24
Escaping parameters like that is usually source of frustration and feels a lot like a time wasted. I see you're on v2 so I would suggest using a technique that Joel "Jaykul" Bennet blogged about a while ago.
Long story short: you just wrap your string with @' ... '@ :
Start-Process \\server\toto.exe @' -batch=B -param="sort1;parmtxt='Security ID=1234'" '@
(Mind that I assumed which quotes are needed, and which things you were attempting to escape.) If you want to work with the output, you may want to add the
BTW: this was so important issue that since v3 you can use
--% to stop the PowerShell parser from doing anything with your parameters:
\\server\toto.exe --% -batch=b -param="sort1;paramtxt='Security ID=1234'"
... should work fine there (with the same assumption).
~ Answered on 2013-08-08 07:18:45
Using the backtick (`) works fine for me if I put them in the following places:
$cmd="\\server\toto.exe -batch=B -param=`"sort1;parmtxt='Security ID=1234'`""
$cmd returns as:
\\server\toto.exe -batch=B -param="sort1;parmtxt='Security ID=1234'"
Is that what you were looking for?
The error PowerShell gave me referred to an unexpected token 'sort1', and that's how I determined where to put the backticks.
The @' ... '@ syntax is called a "here string" and will return exactly what is entered. You can also use them to populate variables in the following fashion:
[email protected]' "\\server\toto.exe -batch=B -param="sort1;parmtxt='Security ID=1234'"" '@
The opening and closing symbols must be on their own line as shown above.
~ Answered on 2013-08-19 12:16:05