{installMS32Bit}
Как Матиас указывает в комментарии к вопросу, это утверждение не вызывает вашу функцию, он оборачивает его в блок сценария ({ ... }
) [1] , который представляет собой фрагмент кода для повторного использования (например, указатель на функцию, если говорить свободно) , для позже выполнение через &
, оператор вызова (выполнения) .
Для вызова вашей функции, просто используйте его имя (само по себе здесь, учитывая, что нет аргументов для передачи): installMS32Bit
Invoke-Expression
, как правило, следует избегать ; определенно не используйте его для вызова внешней программы , как в ваших попытках.
Кроме того, обычно нет необходимости вызывать внешнюю программу через cmd.exe
(cmd /c ...
) , просто вызовите его напрямую .
Например, замените последний Invoke-Epression
звонок из вашего вопроса на:
# If the EXE path weren't quoted, you wouldn't need the &
& 'C:\temp\setup.exe' /configure 'C:\temp\uninstall.xml'
Мне нравится наблюдать за прогрессом, и мне хотелось бы, чтобы дополнительный windows был открыт для мониторинга запуска нового процесса. Мне не удалось найти решение с постоянным окном, которое помогло бы мне сделать это без выражения-выражения.
(Вкл. Windows), Start-Process
по умолчанию запускает консольное приложение в новом окне (если вы не укажете -NoNewWindow
), асинхронно (если не указано -Wait
).
Вы не можете передать .ps1
script напрямую до Start-Process
(он будет рассматриваться как документ для открытия, а не исполняемый для вызова), но вы можете передать его CLI PowerShell через параметр -File
:
Start-Process powershell.exe '-File install.ps1'
Выше приведено краткое обозначение:
Start-Process -FilePath powershell.exe -ArgumentList '-File install.ps1'
То есть PowerShell выполнит следующее в новом окне :
powershell.exe -File install.ps1
[1] Поскольку вы не назначаете блок сценария, создаваемый переменной, он неявно вывод (выводится на дисплей при отсутствии перенаправления); блок скрипта преобразуется по буквальному содержанию, исключая {
и }
, поэтому строка installMS32Bit
будет выводиться на дисплей.