문제

나는 이것을 잘 실행할 수 있습니다 :

$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

start-process를 사용하여 MSBuild에 매개 변수를 전달할 수 있는 방법이 있나요?나는 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'

편집 : 따옴표.

경고

Powershell에서 생성된 cmd.exe 창에서 PowerShell을 실행하면 두 번째 인스턴스는 더 이상 작업이 완료될 때까지 기다리지 않습니다.

cmd>  PowerShell
PS> Start-Process cmd.exe -Wait 

이제 새 cmd 창에서 PowerShell을 다시 실행하고 그 안에서 두 번째 cmd 창을 시작합니다.cmd2> 파워셸

PS> Start-Process cmd.exe -Wait
PS>   

PowerShell의 두 번째 인스턴스는 더 이상 -Wait 요청을 따르지 않으며 모든 백그라운드 프로세스/작업은 아직 실행 중이더라도 '완료' 상태를 반환합니다!

내 C# 탐색기 프로그램을 사용하여 cmd.exe 창을 열고 PS가 해당 창에서 실행될 때 -Wait 요청도 무시한다는 사실을 발견했습니다.cmd.exe의 'win32 작업'인 PowerShell은 대기 요청을 수락하지 못하는 것으로 보입니다.

Windows 7/x64의 PowerShell 버전 3.0에서 이 문제가 발생했습니다.

CMD를 사용하는 것은 대안으로 잘 작동했으며, 특히 호출 된 응용 프로그램에서 출력을 파이프해야 할 때 (MSBuild와 달리 로깅에 내장되지 않은 경우에도).

cmd /C "$msbuild $args" >> $outputfile

OP가 PowerShell 커뮤니티 확장을 사용하지 않는 한 다른 많은 사람들과 함께 시작 프로세스 CMDLET을 제공합니다. 이 경우 Glennular의 솔루션은 pscx start -process의 위치 매개 변수와 일치하기 때문에 처리합니다. -Path (위치 1) -경사 (Positon 2).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top