2008-10-22 5 views
5

프로세스를 시작하고 출력을 변수로 읽을 수 있어야합니다. 그런 다음 명령 반환에 따라 전체 출력 또는 선택된 하위 집합 만 표시하도록 선택할 수 있습니다.powershell에는 popen과 동일한 기능이 있습니까?

분명히 말하면, 필자는 텍스트 기반 프로세스 (실제로 psexec)를 실행하고 해당 명령 (stdout, stderr 등)의 출력을 콘솔에 직접 출력하지 않고 변수로 읽어 들이기를 원합니다.

답변

5

당신은 내가 당신이 중 어딘가에 실행의 출력을 파이프 또는 System.Diagnostics.Process을 활용에서 수행하고 싶은 어떤이있는 파워 쉘 팀 블로그에서 this article 생각 프로세스의 어떤 종류의, 그러나에 대한 몇 가지 세부 사항을 떠났다.

이제 당신이 원하는 무엇을, 당신이 함께 원하는대로 수행 할 Process 개체의 StandardOutput 속성에서 읽은 다음 RedirectStandardOutput 속성으로 true에 공급하는 ProcessStartInfo 클래스를 사용하고 있습니다 같이 두 번째 옵션은 소리 있음 산출. StandardError는 동일하게 작동합니다.

+0

합니다. PowerShell에 의해 시작된 명령에서 출력을 포착하고 싶습니다 ... popen과 같습니다. 이 페이지는 processse를 시작하는 방법을 나열하는 것으로 보인다. – vfilby

+0

바로이 예제는 실행 파일 실행을 다룹니다. ProcessStartInfo 클래스, 특히 RedirectStandardOutput 속성을 활용하여 원하는 것을 캡처하십시오. –

+0

예, 그걸 동시에 알아 냈습니다. PowerShell의 스트림에서 데이터를 읽는 것에 대한 힌트가 있습니까? – vfilby

1

는 지금까지 변수에 읽기 물건에 관한 한, 당신은 단지,하지만하지 자세한 정보, 경고 또는 오류 스트림

$output = ps 

처럼이 단지 사로 잡을 것입니다 표준 출력을 뭔가를 할 수 있어야합니다. 특수 변수 $?을 테스트하여 이전 명령의 종료 코드를 얻을 수 있습니다.

더 자세한 정보는 좀 더 완벽한 답변을 제공하는 데 도움이 될 것이라고 생각하지만 희망 사항은 사용자가 찾고있는 것을 향한 몇 가지 방법입니다.

1

PowerShell Community Extensions시작 프로세스을 포함합니다. 실제로 System.Diagnostics.Process을 반환합니다.

> $proc = Start-Process pslist -NoShellExecute 

그러나, 이것은 당신이를 실행하기 전에 출력을 리디렉션을 허용하지 않습니다 그것을 반대프로세스를 반환하면서. 하나는 자신의 프로세스를 생성 먼저 ProcessStartInfo를 회원을 수정하여 그것을 실행할 수있는 수행합니다 : 당신이 원하는 얼마나 명확 확실하지

> $proc = New-Object System.Diagnostics.Process 
> $proc.StartInfo = New-Object System.Diagnostics.ProcessStartInfo("pslist.exe") 
> $proc.StartInfo.CreateNoWindow = $true 
> $proc.StartInfo.UseShellExecute = $false 
> $proc.StartInfo.RedirectStandardOutput = $true 
> $proc.Start() 
> $proc.StandardOutput.ReadToEnd() 
관련 문제