2012-02-11 2 views
11

PowerShell에서 프로그램을 실행하면 새 창이 열리고 출력이 표시되기 전에 창이 닫힙니다. PowerShell이이 창을 열어 둘 수 있도록하려면 어떻게해야합니까?명령 창을 열어두기 위해 PowerShell을 얻는 방법?

+0

이 프로그램은 exe 또는 배치 파일입니까? 실행중인 정확한 명령을 제공 할 수 있습니까? 아마도 실행 파일의 이름을 변경할 수 있습니까? –

+0

그것은 exe입니다. 나는 그 프로그램이 내 경로에있는 폴더를 추가했다. 프로그램의 이름을 입력 할 때 프로그램이 실행되면서 열리는 창을 제외하고는 너무 빨리 닫아서 그 내용을 읽는다. 이 프로그램은 Python 프로그램을 테스트하는 프로그램입니다. 아래 의견에 관해서는 배치 파일에 프로그램을 래핑하는 방법을 모르겠습니다./ – Erman

+0

이를 수행하는 방법을 명확히하기 위해 답변을 업데이트했습니다. 또한 프로그램 출력을 텍스트 파일로 리디렉션하는 것이 좋습니다. –

답변

1

cmd /c foo.cmd 명령으로 실행되는 배치 파일 (.cmd 또는 .bat 확장자) 인 경우 프로그램을 cmd /k foo.cmd으로 변경하면 프로그램이 실행되지만 프롬프트가 계속 열려 있습니다.

프로그램이 배치 파일이 아닌 경우 배치 파일로 감싸고 끝에 pause 명령을 추가하십시오. 배치 파일에 프로그램을 래핑하려면 명령을 텍스트 파일에두고 .cmd 확장명을 지정하기 만하면됩니다. 그런 다음 exe 대신 실행하십시오. 일을

8

시도 :

start-process your.exe -NoNewWindow 

필요도 경우 -Wait를 추가합니다.

+0

이렇게하면 "시작 프로세스 :이 오류로 인해 명령을 실행할 수 없습니다 : 지정한 파일을 찾을 수 없습니다. " 내 경로에 exe의 위치를 ​​추가했기 때문에 이상합니다. – Erman

+0

@Erman - 실제로 있는지 확인하십시오. 필요한 경우 Powershell을 다시 시작하십시오. 또는 전체 경로를 사용하여 현재 진행중인 작업을 확인할 수도 있습니다. – manojlds

+0

@Erman powershell.exe를 넣고 싶습니다. my.bat -NoNewWindow –

3

몇 주 전에 비슷한 문제를 해결하고있었습니다. & (& '.\program.exe')을 사용하지 않으려면 시작 프로세스를 사용하고 시작 프로세스 (출력을 명시 적으로 읽는 곳)로 출력을 읽으십시오. 좋아

param (
    $name, 
    $params 
) 

$process = New-Object System.Diagnostics.Process 
$proInfo = New-Object System.Diagnostics.ProcessStartInfo 
$proInfo.CreateNoWindow = $true 
$proInfo.RedirectStandardOutput = $true 
$proInfo.RedirectStandardError = $true 
$proInfo.UseShellExecute = $false 
$proInfo.FileName = $name 
$proInfo.Arguments = $params 
$process.StartInfo = $proInfo 

#Register an Action for Error Output Data Received Event 
Register-ObjectEvent -InputObject $process -EventName ErrorDataReceived -action { 
    foreach ($s in $EventArgs.data) { Write-Host $s -ForegroundColor Red } 
} | Out-Null 

#Register an Action for Standard Output Data Received Event 
Register-ObjectEvent -InputObject $process -EventName OutputDataReceived -action { 
    foreach ($s in $EventArgs.data) { Write-Host $s -ForegroundColor Blue } 
} | Out-Null 

$process.Start() | Out-Null 
$process.BeginOutputReadLine() 
$process.BeginErrorReadLine() 
$process.WaitForExit() 

을 그리고 그것을 전화 :

.\startprocess.ps1 "c:\program.exe" "params" 

당신은 쉽게 출력을 재 또는 어떤 종류를 구현할 수있다 (또는 매크로) - 예를 들어,

그냥이 별도의 PS1 파일을 넣어 응용 프로그램이 동결 될 수있는 경우 타임 아웃이 필요합니다.

+0

완벽. 정확히 내가 무엇을 찾고 있었는지. 엄청 고마워. – Saulius

4

OP가 대답에 만족했을 것 같지만 프로그램을 실행 한 후 새 창을 열어 두지 않습니다. 묻고 (그리고 내가 찾고 있던 대답). 그래서, 좀 더 조사한 후에, 나는 다음을 생각해 냈습니다.

Start-Process cmd "/c `"your.exe & pause `"" 
+2

PowerShell 순수 사용자 대신 cmd 대신 powershell을 사용하는 것이 좋습니다. Start-Process powershell "your.exe; read-host '계속하려면 Enter 키를 누르십시오. "" – Cary

+1

다음과 같이 사용합니다 :'Start-Process "powershell"-Window -ArgumentList "tree'D : '; 일시 중지 ". – larkee

관련 문제