Есть ли способ подавить заключенные кавычки вокруг каждого аргумента командной строки, который 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 для путей, в которых есть пробелы.
Есть ли способ подавить это поведение?