2017-12-03 17 views
0

외부 프로그램 및 다른 스크립트를 실행하는 PowerShell 스크립트를 작성하고 있습니다. 외부 프로그램의 오류 처리

& ./directory/file.exe 

or 

& ./directory/script.ps1 

가 어떻게 오류를 잡을 수 :

나는 아래와 같은 주요 스크립트에서 .EXE 및 .ps1입니다 스크립트를 호출하는거야?

유닉스처럼, 나는 $?를 사용하고 같은 수행 할 수 있습니다

if($? -ne 0) then exit 1 ... 

이것이 가장 좋은 방법입니다? EXIT을 PowerShell과 함께 사용할 수 있습니까?

그런데 "&".exe 파일을 호출하는 가장 좋은 방법은 무엇입니까? .ps1?

답변

0

$?은 부울이며 이전 powershell 문의 실행 상태 만 반영합니다.

외부 프로그램의 경우

, 검사 $LASTEXITCODE :

내가 return 사용 위의 예에서
& .\directory\file.exe 
if($LASTEXITCODE){ 
    return 
} 

-exit가 잘 작동하지만, 즉시 종료 할 수있는 호스트 응용 프로그램을 지시하는 것이기 때문에 내가 일반적으로 exit를 사용하지 마십시오 나중에 더 큰 작업의 일부로 다른 스크립트에서 스크립트를 호출하려는 경우 바람직하지 않을 수도 있습니다.

Invokcation 연산자 &은 실행 파일과 powershell 스크립트 파일 경로 모두에서 완벽하게 작동합니다.

+0

스크립트 내에서 'exit' 명령은 전체 호스트가 아닌 해당 스크립트 만 종료합니다. – PetSerAl

+0

$ LastExitCode와 잘 작동하지 않는 것 같습니다. mail.exe가 실수로 실패했습니다. 아래를 사용할 때 email.exe가 실패하더라도 반환 코드는 0입니다. $ LastExitCode의 값은 0 및 MAIL.EXE 이메일 -EL $ EML -smt $ smtp_server에 경우 ($ LastExitCode> 0) { 쓰기 호스트 "오류 보내는 이메일" 종료 5 } 입니다 쓰기 호스트 "이메일 성공" 아래에서 사용하는 경우 작동합니다. 및 MAIL.EXE 이메일 -EL $ EML -smt $ smtp_server에 경우 (! $?) { 쓰기 호스트 "오류 보내는 이메일" 종료 5 } 쓰기 호스트 "이메일 성공" I 이해가 안되는 이유 – Linus

+0

@Linus'$ LastExitCode -0 0'을'$ LastExitCode -gt 0'으로 변경 -'>'는 스트림 방향 지정 연산자입니다. –