PowerShell - 시작 프로세스 및 Cmdline 스위치
-
19-08-2019 - |
문제
나는 이것을 잘 실행할 수 있습니다 :
$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).