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