Como suprimir aspas nos comandos do PowerShell para executáveis

Existe uma maneira de suprimir as aspas em torno de cada argumento da linha de comando que o PowerShell gosta de gerar e depois passar para executáveis externos para argumentos da linha de comando que contenham espaços?

Aqui está a situação:

Uma maneira de descompactar muitos instaladores é um comando do formulário:

msiexec /a <packagename> /qn TARGETDIR="<path to folder with spaces>"

Tentar executar isso no PowerShell provou ser bastante difícil. O PowerShell gosta de incluir parâmetros com espaços entre aspas duplas. As seguintes linhas:

msiexec /a somepackage.msi /qn 'TARGETDIR="c:\some path"'

msiexec /a somepackage.msi /qn $('TARGETDIR="c:\some path"')

$td = '"c:\some path"'

msiexec /a somepackage.msi /qn TARGETDIR=$td

Todos resultam na seguinte linha de comando (conforme relatada pela API Win32 GetCommandLine ()):

"msiexec" /a somepackage.msi /qn "TARGETDIR="c:\some path""

Esta linha de comando:

msiexec /a somepackage.msi TARGETDIR="c:\some path" /qn

resulta em

"msiexec" /a fooinstaller.msi "TARGETDIR=c:\some path" /qn

Parece que o PowerShell gosta de incluir os resultados de expressões destinadas a representar um argumento entre aspas ao passá-los para executáveis externos. Isso funciona bem para a maioria dos executáveis. No entanto, MsiExec é muito específico sobre as regras de cotação que deseja e não aceitará nenhuma das linhas de comando que o PowerShell gera para os caminhos que possuem espaços neles.

Existe uma maneira de suprimir esse comportamento?

questionAnswers(6)

yourAnswerToTheQuestion