У вас есть правильное представление об использовании -ArgumentList
.Однако вам необходимо заключить аргументы в двойные кавычки, а обратный удар должен экранировать любые литералы двойных кавычек, которые вам нужно передать в исполняемый файл.
Start-Process -FilePath "./AppInstaller.exe" -ArgumentList "/s FLAG=`"remove`"" -Wait
-ArgumentList
ожидает, что ему будет передан строковый массив.Под крышками PowerShell объединяет эти элементы массива через пробел (
).Если вы предоставите параметру значение, представляющее собой одну строку с аргументами .exe, разделенными пробелом, вы получите тот же результат.Поскольку PowerShell пытается выполнить раскрытие строки при обнаружении пары двойных кавычек, необходимо указать PowerShell, чтобы это не делалось, когда это нежелательно.Избегая двойной кавычки, PowerShell пропустит расширение этой экранированной двойной кавычки.
Несколько альтернативный подход заключается в создании массива ваших аргументов.Затем передайте массив в параметр -ArgumentList
.Вам все равно придется включать ваши двойные кавычки буквально как часть вашей строки, окружив аргумент одинарными кавычками или сделав обратную кавычку.