Ответ 1
вы захотите разделить свои аргументы на отдельный параметр
$msbuild = "C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe"
$arguments = "/v:q /nologo"
start-process $msbuild $arguments
Я могу запустить этот штраф:
$msbuild = "C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe"
start-process $msbuild -wait
Но когда я запускаю этот код (ниже), я получаю сообщение об ошибке:
$msbuild = "C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe /v:q /nologo"
start-process $msbuild -wait
Есть ли способ передать параметры в MSBuild с помощью start-process? Я открыт для того, чтобы не использовать start-process, единственная причина, по которой я его использовал, - мне нужно было иметь "команду" как переменную.
Когда у меня есть
C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe/v: q/nologo
на самой линии, как это происходит в Powershell?
Должен ли я использовать какой-то вид функции eval()?
вы захотите разделить свои аргументы на отдельный параметр
$msbuild = "C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe"
$arguments = "/v:q /nologo"
start-process $msbuild $arguments
Используя явные параметры, это будет:
$msbuild = 'C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe'
start-Process -FilePath $msbuild -ArgumentList '/v:q','/nologo'
EDIT: кавычки.
Предупреждение
Если вы запустите PowerShell из окна cmd.exe, созданного Powershell, второй экземпляр больше не ждет завершения заданий.
cmd> PowerShell
PS> Start-Process cmd.exe -Wait
Теперь из нового cmd-окна снова запустите PowerShell и внутри него запустите окно 2-го CMD: cmd2 > PowerShell
PS> Start-Process cmd.exe -Wait
PS>
Второй экземпляр PowerShell больше не соблюдает запрос -Wait и ВСЕ фоновые процессы/задания возвращают статус "Завершено", даже если они все еще запущены!
Я обнаружил это, когда моя программа С# Explorer используется для открытия окна cmd.exe, а PS запускается из этого окна, а также игнорирует запрос -Wait. Похоже, что любой PowerShell, который является "работой win32" cmd.exe, не выполняет запрос ожидания.
Я столкнулся с этим с PowerShell версии 3.0 на Windows 7/x64
Я нашел, что использование cmd работает как альтернатива, особенно когда вам нужно вывести вывод из вызываемого приложения (особенно, когда он не имеет встроенного ведения журнала, в отличие от msbuild)
cmd /C "$msbuild $args" >> $outputfile
Если OP не использует расширения сообщества PowerShell, которые предоставляют командлет Start-Process вместе с кучей других. Если это случай, то решение Glennular работает, поскольку оно соответствует позиционным параметрам pscx\start-process: -path (позиция 1) -аргументов (позиция 2).