2017-05-21 8 views
0

Powershell 스크립트로 이상한 케이스가 발생합니다. 나는 이제 .exe 파일 이 exe 인 런타임이 약 3 시간 만 지속적으로 2 전채 요리 후 충돌입니다 실행하는 스크립트를 작성했습니다 (1~2분 더 많거나 적은) 내 머리를 알아 내려고 시도 중단해야몇 시간 후에 Powershell 충돌이 발생합니다.

이유 프로세스가 충돌 결국 나는 파워 쉘 충돌 때문에. exe 충돌 발견. 나는 윈도우 파워 쉘 로깅 활성화 한 파워 쉘에 의해 맡았다이 문제를 실현

enter image description here "파이프 라인이 중지되었습니다"오류 메시지를 찾은 후

$Proc = Start-Process -FilePath $ExePath -ArgumentList $Arguments -NoNewWindow -PassThru 
$Proc | Wait-Process -Timeout 28800 -ea 0 -ev timeouted 

: 여기

는 프로세스 실행 명령입니다

스크립트가 프로세스가 끝난 후 더 많은 작업을 수행하고 종료 코드를 가져와야하므로 -PassThru 플래그가 사용됩니다. PassThru 플래그 또는 프로세스 대기 명령을 사용하지 않고 실행하려고 시도했지만 결과는 동일하게 유지되었습니다 (2 시간 후에 프로세스가 중단되었지만 "파이프 라인이 중지되었습니다."메시지가 기록되지 않음)

중요 포인트 :

  1. .exe 파일이 시도로 악화되어 로거와 catch 블록을하지만,이 crashing-하면 .exe 파일에서 런타임 오류가 아닌 경우에 어떤 일을 기록하지 않았다
  2. 때 명령 줄에서 독립적으로 .exe를 실행하면 ~ 3 시간 후 성공적으로 완료됩니다.
  3. 때문에 높은 CPU/메모리/디스크 사용에 exe 인이 충돌 케이싱되지 않은 관리자 권한
  4. 실행
  5. 파워 쉘 스크립트

한번 좀 더 업데이트가됩니다 후속 것입니다.

모든 도우미에게 감사드립니다. 도움을 많이 받으실 수 있습니다!

+0

버전을 사용하여 작업을 기다릴? –

+0

안녕하세요, 4.0을 사용하고 있습니다 –

답변

0

제 생각에는 Start-Process cmdlet은 빠른 작업에 좋습니다. 그러나, 그것은 exe가 행동하지 않는 이유를 디버깅하려고 할 때 많은 것을 원합니다.

이 문제를 해결하려면 .Net 개체를 사용하여 인스턴스 생성에 대한 특정 정보를 리디렉션하고 변경하는 것이 유용 할 수 있습니다. exe 실행을 디버깅하는 데 문제가있을 때 사용한 예제 함수를 아래에 놓았습니다.

function Start-Exe 
{ 
    param 
    ([string]$exePath, [string]$args1) 

    $returnVal = $false 
    $pinfo = New-Object System.Diagnostics.ProcessStartInfo 
    $pinfo.FileName = $exePath 
    $pinfo.RedirectStandardError = $true 
    $pinfo.RedirectStandardOutput = $true 
    $pinfo.UseShellExecute = $false 
    $pinfo.Arguments = $args1 
    $p = New-Object System.Diagnostics.Process 
    $p.StartInfo = $pinfo 
    $p.Start() | Out-Null 
    $p.WaitForExit() 
    $stdout = $p.StandardOutput.ReadToEnd() 
    $stderr = $p.StandardError.ReadToEnd() 
    $exitCode = $p.ExitCode 
    #OutputFile can be some log file, or just use write-host to pump to console 
    #$stdout | Add-Content $global:OutputFile 
    #$stderr | Add-Content $global:OutputFile 

    return $exitCode 
} 
+0

안녕하세요, David, 답변 해 주셔서 감사합니다. exe 실행에 문제가 있다는 것을 알고 있습니다.내가 알아 내기 위해 노력하고있어 (I 독립적으로 모든 것을 실행 부드럽고의 종료 코드 0을 EXE 파일을 실행할 때) PowerShell 프로세스가 충돌하는 이유 이시간 (계속) 감사 후 PowerShell을 정지, shlomy. –

0

Wait-Process을 사용하지 않고 시도해 볼 수 있으며 재현 가능 여부를 확인할 수 있습니다.

Start-Process-Wait 매개 변수.

또는 -Wait없이 작업에를 만들고 Wait-.Job cmdlet를 PowerShell을의

+0

안녕하세요, 저는 이미 그것을 시도했습니다, 그것은 exe 프로세스가 PS 프로세스가 완료되었지만 Powershell 프로세스 아래에있는 CPU와 같은 것으로 등록되어있는 것처럼 보입니다. –