2009-06-19 4 views
7

PowerShell은 .bat와 .NET의 이상한 혼합입니다. .bat에서 errorlevel 및 stderr 출력을 명령으로 확인합니다. .NET에서는 예외를 잡습니다.PowerShell에서 오류 처리를 수행하는 올바른 방법은 무엇입니까?

cmdlet는 오류를 어떻게 반환합니까? 실패 할 때 예외를 던지거나 $를 설정합니까? 대신에? 구성 가능합니까?

PowerShell에서 호출하는 .NET 함수는 항상 예외를 throw하고 자동으로 셸에 걸려서 오류로 변환되지 않는다고 가정합니다. 그 맞습니까?

어쩌면 내가 정말로 물어야 할 것은 :이 모든 것을 검토하는 좋은 문서는 무엇일까요? cmd 's .bat 및 .NET에 대한 경험이있는 나와 같은 많은 엔지니어들처럼 보입니다.이 용감한 Posh의 새로운 세상에서 우리가해야 할 일은 정확히 궁금합니다.

답변

9

는 -erroraction라는 매개 변수가있다. 가능한 값은 SilentlyContinue, Stop, Continue 또는 Inquire입니다. 이러한 옵션에 $ errorpreference라는 전역 변수를 지정할 수도 있습니다.

V1에서는 트랩 키워드를 사용할 수 있습니다. V2에 추가 된 트랩과 try/catch/finally 구문의 주요 차이점을 설명하는 pretty good, concise article이 있습니다. 여기

트랩 문을 사용하는 간단한 예제입니다, 첫 번째 예외의과 특이 유형입니다 두 번째는 모든 오류 트랩

trap {"Other terminating error trapped" } 
trap [System.Management.Automation.CommandNotFoundException] 
     {"Command error trapped"} 
1/$null 
+0

정확히 내가 필요한 것, 감사합니다. – scobi

+0

전역 변수의 이름은 $ errorpreference가 아니라 $ ErrorActionPreference입니다. http://blogs.msdn.com/powershell/archive/2008/04/10/erroraction-update.aspx –

0

나는 Posh를 모두 .Net이라고 생각합니다. .Net에서 작동하는 대부분의 개념은 Posh에서 작동해야합니다.

오류 처리의 경우 Try..catch를 사용할 수 있습니다. 오류를 "트랩"하고 오류 조건에서 실행할 명령 세트를 지정할 수도 있습니다.

나는 높은 내장 도움을 추천 할 것입니다 :

개별 cmdlet에 대한
Get-Help about_Errors 
Get-Help about_Trap 
+0

그래서 어쩌면 V2CTP3에서 제거 일반적인 캐치이다하지만이 about_errors 또는 about_trap. 그리고 귀하의 응답 종류는 내 질문이 어디서 왔는지 요약합니다. Posh는 .NET-y입니다. try-catch 등을 알고 있지만, 실제로 가지고있는 질문에 대답하는 데 도움이되지 않습니다. – scobi

관련 문제