programing

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

powerit 2023. 4. 8. 09:52
반응형

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\MS빌드.exe/v:q/nologo
파워셸에서는 어떻게 처리되죠?

대신 어떤 종류의 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'

편집: 따옴표

경고

cmd에서 PowerShell을 실행하는 경우두 번째 인스턴스는 더 이상 작업이 완료될 때까지 기다리지 않습니다.

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

이제 새로운 cmd 창에서 PowerShell을 다시 실행하여 cmd2> PowerShell의 두 번째 cmd 창을 엽니다.

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

PowerShell의 두 번째 인스턴스는 더 이상 -Wait 요청을 수락하지 않으며 모든 백그라운드 프로세스/작업이 실행 중임에도 불구하고 'Completed' 상태로 반환됩니다.

C# Explorer 프로그램을 사용하여 cmd를 열었을 때 이 사실을 알게 되었습니다.exe 창과 PS는 이 창에서 실행되지만 -Wait 요청도 무시됩니다.cmd.exe의 'win32 job'인 PowerShell은 대기 요청을 처리할 수 없습니다.

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

cmd를 사용하면 특히 호출된 응용 프로그램에서 출력을 파이핑할 필요가 있는 경우(특히 msbuild와 달리 로깅이 내장되어 있지 않은 경우) 다른 방법으로도 도움이 된다는 것을 알게 되었습니다.

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

OP가 PowerShell Community Extensions를 사용하고 있지 않은 한 시작 프로세스 cmdlet을 여러 개 제공합니다.이 경우 Glennular의 솔루션은 pscx\start-process : -path(위치 1) -arguments(양수 2)의 위치 매개변수와 일치하므로 치료 효과가 있습니다.

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

반응형