В PowerShell - старт-процесс и переключатели командной строки
Я могу запустить это нормально:
$msbuild = "C:WINDOWSMicrosoft.NETFrameworkv3.5MSBuild.exe"
start-process $msbuild -wait
но когда я запускаю этот код (ниже), я получаю сообщение об ошибке:
$msbuild = "C:WINDOWSMicrosoft.NETFrameworkv3.5MSBuild.exe /v:q /nologo"
start-process $msbuild -wait
есть ли способ передать параметры в MSBuild с помощью start-process? Я открыт для того, чтобы не использовать start-process, единственная причина, по которой я использовал его, заключалась в том, что мне нужно было иметь "команду" в качестве переменной.
когда у меня есть
C:WINDOWSMicrosoft.NETFrameworkv3.5MSBuild.exe /v: q / nologo
в отдельной строке, как это обрабатывается в Powershell?
должен ли я использовать какую-то функцию eval() вместо этого?
5 ответов:
вы захотите разделить свои аргументы на отдельный параметр
$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'
изменить: цитаты.
предупреждение
Если вы запускаете PowerShell из cmd.окно exe, созданное Powershell, 2-й экземпляр больше не ждет завершения заданий.
cmd> PowerShell PS> Start-Process cmd.exe -Wait
теперь из нового окна cmd снова запустите PowerShell и в нем запустите второе окно cmd: cmd2 > PowerShell
PS> Start-Process cmd.exe -Wait PS>
2-й экземпляр PowerShell больше не выполняет запрос-Wait, и все фоновые процессы / задания возвращают статус "завершено", даже если они все еще работают !
I обнаружил это, когда моя программа c# Explorer используется для открытия cmd.окно exe и PS запускается из этого окна, он также игнорирует запрос-Wait. Похоже, что любой PowerShell, который является "заданием win32" cmd.exe не выполняет запрос ожидания.
я столкнулся с этим с PowerShell версии 3.0 на windows 7 / x64