PowerShell is full of little mysteries to uncover. Here is one using the PowerShell Escape
Character.
The problem that we are addressing is that a string needed
to be created in code that contains a path that had a space in it that was
provided by a variable. In order to
provide the value of a variable to a string, we have a few options.
$uninst = "MsiExec.exe /X{26A24AE4-039D-4CA4-87B4-2F32180101F0}"
$Path = "/c `"$uninst`" /quiet /norestart"
$Path
This example uses the PowerShell escape character. We place the back tick in front of both of
the double quotes surrounding $uninst.
Here is the result.
/c "MsiExec.exe
/X{26A24AE4-039D-4CA4-87B4-2F32180101F0}" /quiet /norestart
You can clearly see the double quotes are now inside the
string. Here is what it looked like
without the escape characters.
You can see PowerShell considers this an error.
Here is another example using a combination of the string
Join “+” operator and the single quotes.
$uninst = "MsiExec.exe
/X{26A24AE4-039D-4CA4-87B4-2F32180101F0}"
$Path = '/c "'+"$uninst"+'"/quiet /norestart'
$Path
/c "MsiExec.exe
/X{26A24AE4-039D-4CA4-87B4-2F32180101F0}"/quiet /norestart
We are only using the double quotes to extract the value of
$uninst. The other double quotes are
inside of the single quotes. This treats
them as the literal character of a double quote. We actually created 3 different strings and
joined them together into one string using the “+” operator.
Comments