Как подавить кавычки в командах PowerShell для исполняемых файлов

Есть ли способ подавить кавычки вокруг каждого аргумента командной строки, который PowerShell любит генерировать, а затем передавать внешним исполняемым файлам для аргументов командной строки, в которых есть пробелы?

Вот ситуация:

Один из способов распаковать множество инсталляторов - это команда вида:

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

Попытка выполнить это из PowerShell оказалась довольно сложной. PowerShell любит заключать параметры с пробелами в двойные кавычки. Следующие строки:

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

Все результаты в следующей командной строке (как сообщается Win32 GetCommandLine () API):

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

Эта командная строка:

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

результаты в

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

Кажется, что PowerShell любит заключать результаты выражений, предназначенных для представления одного аргумента в кавычках, при передаче их во внешние исполняемые файлы. Это прекрасно работает для большинства исполняемых файлов. Тем не менее, MsiExec очень специфичен в отношении правил цитирования, которые он хочет, и не будет принимать ни одну из командных строк, которые генерирует PowerShell, для путей с пробелами.

Есть ли способ подавить это поведение?

Ответы на вопрос(6)

Ваш ответ на вопрос