Командная строка выполняет это правильно, а Powershell - нет? - PullRequest
0 голосов
/ 27 мая 2020

Есть некоторая странность, когда Powershell неправильно выполняет эту команду. Он не может понять INSTALLFOLDER или TARGETDIR и просто выдает Windows окно справки установщика.

В то время как командная строка обрабатывает это нормально ??? Это очень странно. PS версия 5.1.18362 мне кажется.

команда:

msiexec.exe /i "C:\Users\sadas\aasasdd\sda\asdasd\19526-Debug-x64.msi" INSTALLFOLDER="C:\Installation Test" /qn

Мой msi является msi-установщиком Wix и имеет свойство INSTALLFOLDER

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Это не то, как вы запускаете эту команду в PowerShell. Есть несколько способов запустить внешнюю команду в PowerShell, и это хорошо документированный вариант использования. Ссылки для подписки

• Использование PowerShell и внешних команд и их параметров или переключателей. Выполнение внешних команд всегда требует особого внимания.

• PowerShell: запуск исполняемых файлов

• Решение проблем с внешними командными строками в PowerShell

• 5 основных советов по запуску внешних команд в Powershell

• Использование Windows PowerShell для запуска старых инструментов командной строки (и их самых странных параметров)

• Правильное выполнение внешних команд в PowerShell https://mnaoumov.wordpress.com/2015/01/11/execution-of-external-commands-in-powershell-done-right

https://mnaoumov.wordpress.com/2015/03/31/execution-of-external-commands-native-applications-in-powershell-done-right-part-2

https://mnaoumov.wordpress.com/2015/04/05/execution-of-external-commands-native-applications-in-powershell-done-right-part-3

http://edgylogic.com/blog/powershell-and-external-commands-done-right

• Особенности кавычек

https://trevorsullivan.net/2016/07/20/powershell-quoting

PowerShell имеет список символов, которые означают определенные c вещи, в отличие от того, что означает реализация cmd.exe, и если они вам нужны, они должны быть правильно завершены. См. Ниже

О специальных символах

PowerShell - специальные символы и токены

Итак, чтобы ваша команда работала в консоли PowerShell, ISE, VSCode, сделайте что-нибудь вроде этого ...

# Using teh Call operator
& 'msiexec.exe /i "C:\Users\sadas\aasasdd\sda\asdasd\19526-Debug-x64.msi" INSTALLFOLDER="C:\Installation Test" /qn'

или

... это ...

# Using Start-Process
$ConsoelCommand = 'msiexec.exe /i "C:\Users\sadas\aasasdd\sda\asdasd\19526-Debug-x64.msi" INSTALLFOLDER="C:\Installation Test" /qn'
Start-Process powershell -ArgumentList "-NoExit","-Command  &{ $ConsoleCommand }" -Wait
1 голос
/ 28 мая 2020

Убедитесь, что вы проверили наличие этой фактической папки, но, скорее всего, проблема заключается в пробеле

вместо этого:

msiexec.exe /i "C:\Users\sadas\aasasdd\sda\asdasd\19526-Debug-x64.msi" INSTALLFOLDER="C:\Installation Test" /qn

попробуйте следующее:

invoke-command -scriptblock {cmd /c "msiexec.exe /i `"C:\Users\sadas\aasasdd\sda\asdasd\19526-Debug-x64.msi`" INSTALLFOLDER=`"C:\Installation` Test`" /qn"}

Обратите внимание, что все двойные кавычки экранированы И пробел в «C: \ Installation Test» экранирован. Ваша проблема будет сводиться к этому пространству и тому, как вы с этим справитесь. Также попробуйте заменить двойные кавычки на одинарные. Если вы решили использовать переменные в своей команде, обязательно добавьте строки ("" + ""), чтобы создать команду, чтобы она правильно раскрывала переменные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...