• 04/01/2019
  • 6 분 읽
    • c

간단한 설명

사용하는 방법에 대해 설명합니다Try,Catch,andFinally블록을 handleterminating 오류가 있습니다.,

긴 설명

사용하는Try,Catch,andFinally블록에 대응하 또는 손잡이 terminatingerrors 에서 스크립트가 있습니다. Trap문은 스크립트에서 terminatingerrors 를 처리하는 데 사용할 수도 있습니다. 자세한 내용은 about_Trap 을 참조하십시오.

종료 오류로 인해 문이 실행되지 않습니다. PowerShell 이 어떤 식 으로든 종료 오류를 처리하지 않으면 PowerShell 도 현재 파이프 라인을 사용하여 기능 또는 스크립트 실행을 중지합니다., C#과 같은 다른 언어에서는 종료 오류를 예외라고 합니다.

Try블록을 사용하여 오류를 모니터링하기 위해 powershell 을 원하는 스크립트의 섹션을 정의하십시오. 오류가 발생한 경우에는Try블록에 오류가 첫 번째 저장을$Error자동 변수가 있습니다. PowerShell 은 오류를 처리하기 위해Catch블록에 대해 검색합니다., 는 경우에는Try문지 않는 일치하는Catch블록,PowerShell 계속 검색에 대한 anappropriateCatch블록이나Trap문서 부모 범위 등이 있습니다. 후Catch블록이 완료되거나 없는 경우 적절한Catch블록이나Trap문 찾Finally블록이 실행됩니다. 오류를 처리할 수 없는 경우 오류가 오류 스트림에 기록됩니다.,

ACatch블록은 오류를 추적하거나 스크립트의 예상 흐름을 복구하기위한 명령을 포함 할 수 있습니다. ACatch블록은 어떤 오류 유형을 지정할 수 있습니다. ATry문에는 다른 오류 유형에 대한 여러Catch블록이 포함될 수 있습니다.

AFinally블록은 스크립트에 의해 더 이상 필요하지 않은 리소스를 확보하는 데 사용할 수 있습니다.,

Try, Catch, and Finally resemble the Try, Catch, and Finallykeywords used in the C# programming language.

SYNTAX

A Try statement contains a Try block, zero or more Catch blocks, and zeroor one Finally block. A Try statement must have at least one Catch blockor one Finally block.,

는 다음과 같습니다Try블록 syntax:

try {<statement list>}

Try키워드는 다음 문서로 목록호하는 장치입니다. 는 경우 terminatingerror 발생하는 문장에서 문 목록은,실행 thescript 전달하는 오류체에서Try블록에는 적절한Catchblock.

는 다음과 같습니다Catch블록 syntax:

catch *] {<statement list>}

오류 유형에 나타나 부류입니다., 가장 바깥 쪽 괄호는 요소가옵션.

Catch키워드 다음에 오류 유형 지정의 선택적 목록과 명령문 목록이 이어집니다. Try블록에서 종료 오류가 발생하면 PowerShell 은 적절한Catch블록을 검색합니다. Ifone 이 발견되면Catch블록의 문이 실행됩니다.

Catch블록은 하나 이상의 오류 유형을 지정할 수 있습니다. 오류 유형은 aMicrosoft.NET Framework 예외 또는 a 에서 파생 된 예외입니다.,넷 프레임 워크 예외. ACatch블록은 지정된 오류를 처리합니다.NETFramework 예외 클래스 또는 specifiedclass 에서 파생 된 모든 클래스의.

aCatchblock 이 오류 유형을 지정하면Catchblock 이 오류 유형을 처리합니다. 는 경우에는Catch블록을 지정하지 않는 오류 유형,는Catch블록 처리하는 모든 오류에서 발생하는Tryblock., Try문 caninclude 여러Catch블록에 대한 다른 오류가 지정된 형식입니다.

는 다음과 같습니다Finally블록 syntax:

finally {<statement list>}

Finally키워드는 다음에 문 목록 실행되는 모든 시간 thescript 은,실행 는 경우에도Try문지 않고 실행 오류 또는 오류 wascaught 에서Catch문입니다.ctrl+C 를 누르면 파이프 라인이 중지됩니다., 파이프 라인으로 전송되는 객체는 출력으로 표시되지 않습니다. 따라서,는 경우를 포함하면 문이 표시되고,같은”마지막으로 블록가 실행”,itwill 표시되지 않 후 CTRL+C 는 경우에도Finally블록을 달렸다.

길을 끄는 오류를

다음 예제 스크립트를 보여줍Try블록Catchblock:

try { NonsenseString }catch { "An error occurred." }

Catch키워드는 바에 따라Try블록이나 다른Catchblock.,

PowerShell 은 cmdlet 또는 다른 항목으로”NonsenseString”을 인식하지 못합니다.이 스크립트를 실행하는 다음과 같은 결과를 반환합니다:

An error occurred.

경우 스크립트의 만남”NonsenseString”,그 원인 종료 오류가 있습니다. Catch블록은 블록 내부의 명령문 목록을 실행하여 오류를 처리합니다.

여러 CATCH 문을 사용하여

ATry문은 임의의 수의Catch블록을 가질 수 있습니다., 예를 들어,다음과 같은 스크립트Try블록을 다운로드MyDoc.doc,그리고 containstwoCatch블록

첫 번째Catch블록 핸들의 오류 시스템입니다.Net.WebException andSystem.IO.IOException 형식입니다. 두 번째Catch블록은 anerror 유형을 지정하지 않습니다. 두 번째Catch블록은 발생하는 다른 종료 오류를 처리합니다.

PowerShell 은 상속에 의한 오류 유형과 일치합니다. ACatch블록은 지정된 errorsof 를 처리합니다.,NET Framework 예외 클래스 또는 지정된 클래스에서 파생되는 모든 클래스. 다음 예에 포함Catch블록 thatcatches”명령 Not Found”오류가:

catch {"Inherited Exception" }

지정한 오류 유형,CommandNotFoundException,상속에서 시스템.SystemException 유형. 다음 예에서도 잡 CommandNot 발견된 오류가:

catch {"Base Exception" }

이것은Catch블록 처리하는”명령을 발견되지 않았습니다.”오류의 다른 오류 thatinherit 에서 SystemException 유형입니다.,

지정하는 경우에는 오류 등 및 그 파생된 클래스 중 하나,장소의Catch블록에서 파생된 클래스 전Catch블록에 대한 일반적인 클래스입니다.

를 사용하여 트랩에서도 잡기

종료 오류가 발생할 때에는Try블록Trap정의 withintheTry블록이 있는 경우에도 일치하는Catch블록 Trapstatementtakes 제어합니다.,

경우에는Trap에 존재하는 더 높은 차단보다Try과 일치하는 것이 없다Catch블록 안에는 현재 범위,Trap어, 도 ifany 상위 범위가 일치하는Catchblock.

예외 정보에 액세스

Catch블록 내에서 현재 오류는$_를 사용하여 액세스 할 수 있습니다. 객체는 ErrorRecord 유형입니다.,

try { NonsenseString }catch { Write-Host "An error occurred:" Write-Host $_}

이 스크립트를 실행하는 다음과 같은 결과를 반환합니다:

An Error occurred:The term 'NonsenseString' is not recognized as the name of a cmdlet, function,script file, or operable program. Check the spelling of the name, or if a pathwas included, verify that the path is correct and try again.

있는 속성을 추가할 수 있는 액세스와 같은 ScriptStackTrace,예외 및 ErrorDetails. 는 경우,예를 들어 우리는 우리를 변경하는 스크립트는 다음과 같다.

try { NonsenseString }catch { Write-Host "An error occurred:" Write-Host $_.ScriptStackTrace}

그 결과는 유사하다:

An Error occurred:at <ScriptBlock>, <No file>: line 2

리소스를 해제를 사용하여 마지막으로

을 무료로 사용하는 리소스에 의해 스크립트 추가Finally블록 후TryCatch블록이 있습니다., Finally블록 문을 실행하는지 여부에 관계없이Try블록을 만날 종료되는 오류가 있습니다. PowerShell 은 스크립트가 종료되기 전에 또는 현재 블록이 범위를 벗어나기 전에Finallyblockbe 를 실행합니다.

AFinally블록은 ctrl+C 를 사용하여 스크립트를 중지하더라도 실행됩니다. 종료 키워드가Catch블록에서 스크립트를 중지하면Finally블록도 실행됩니다.,

see

about_Break

about_Continue

about_Scopes

about_Throw

about_Trap