ProgramingTip

PowerShell- 시작 프로세스 및 Cmdline 스위치

bestdevel 2020. 10. 31. 09:57
반응형

PowerShell- 시작 프로세스 및 Cmdline 스위치


나는 장기간 사용 가능합니다.

$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에 사용하는 방법이 있습니까? 나는 시작-프로세스를 사용하지 않는 개방형 프로 적이다. 내가 그것을 사용하는 유일한 이유는 "명령"을 변수로 가져야합니다.

한 줄에
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> PowerShell

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

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

내 C # Explorer 프로그램을 사용하여 cmd.exe 창을 실행할 때 PS가 해당 창에서 실행될 때 발견 될 경우-대기 요청도 무시합니다. cmd.exe의 'win32 작업'인 모든 PowerShell이 ​​대기 요청을 처리하지 않을 것입니다.

Windows 7 / x64에서 PowerShell 버전 3.0 으로이 문제를 번호 었습니다.


특히 호출 된 응용 프로그램의 출력을 파이프해야 할 때 cmd를 사용하는 것이 대안으로 잘 작동 함을 발견했습니다 (msbuild와 달리 로깅이 내장되지 않은 경우).

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


OP가 다른 많은 것과 함께 Start-Process cmdlet을 제공하는 PowerShell 커뮤니티 확장을 사용하지 않는 한. 이 경우 Glennular의 솔루션은 pscx \ start-process의 위치 변수와 일치하기 때문에 처리됩니다. -path (위치 1) -arguments (위치 2).

참고 URL : https://stackoverflow.com/questions/651223/powershell-start-process-and-cmdline-switches

반응형