Приложение для удаления Powershell с пользовательским флагом командной строки Wix arg - PullRequest
1 голос
/ 05 июня 2019

Я создал пользовательский аргумент командной строки флага Wix (FLAG = "remove"), чтобы обойти некоторые пользовательские ящики сообщений во время удаления.Для пакетной команды Windows команда выглядит следующим образом:

AppInstaller.exe /quiet /uninstall FLAG="remove"

Я хочу преобразовать эту команду для работы в Powershell, но у меня возникли проблемы с синтаксисом.Я пробовал следующее:

Start-Process ./AppInstaller.exe /s FLAG="remove" -Wait
Start-Process ./ProductivityAppInstaller.exe -ArgumentList /s FLAG="remove" -Wait

Кажется, что Powershell не распознает мой пользовательский аргумент Wix.Я получил ошибку "Не удается найти позиционный параметр, который принимает аргумент" FLAG = удалить "".

1 Ответ

2 голосов
/ 05 июня 2019

У вас есть правильное представление об использовании -ArgumentList.Однако вам необходимо заключить аргументы в двойные кавычки, а обратный удар должен экранировать любые литералы двойных кавычек, которые вам нужно передать в исполняемый файл.

Start-Process -FilePath "./AppInstaller.exe" -ArgumentList "/s FLAG=`"remove`"" -Wait

-ArgumentList ожидает, что ему будет передан строковый массив.Под крышками PowerShell объединяет эти элементы массива через пробел ().Если вы предоставите параметру значение, представляющее собой одну строку с аргументами .exe, разделенными пробелом, вы получите тот же результат.Поскольку PowerShell пытается выполнить раскрытие строки при обнаружении пары двойных кавычек, необходимо указать PowerShell, чтобы это не делалось, когда это нежелательно.Избегая двойной кавычки, PowerShell пропустит расширение этой экранированной двойной кавычки.

Несколько альтернативный подход заключается в создании массива ваших аргументов.Затем передайте массив в параметр -ArgumentList.Вам все равно придется включать ваши двойные кавычки буквально как часть вашей строки, окружив аргумент одинарными кавычками или сделав обратную кавычку.

...