항목
    about_Trap

간단한 설명
    종료 오류를 처리하는 키워드에 대해 설명합니다.


자세한 설명
    종료 오류는 문의 실행을 중지합니다. Windows PowerShell에서는 종료 오류를 처리하지 않는 경우 현재 파이프라인에 
    있는 함수나 스크립트의 실행도 중지합니다. C# 등의 다른 언어에서는 종료 오류를 예외라고 합니다.


    Trap 키워드는 종료 오류가 발생할 때 실행할 문 목록을 지정합니다. Trap 문은 종료 오류를 처리하고 스크립트나 
    함수의 실행이 중지되지 않고 계속될 수 있도록 합니다.


  구문

      Trap 문의 구문은 다음과 같습니다.

          trap [[<error type>]] {<statement list>}


      Trap 문에는 종료 오류가 발생할 때 실행할 문 목록이 포함됩니다. Trap 키워드는 선택적으로 오류 유형을 지정할 수 
      있습니다. 오류 유형에는 대괄호가 필요합니다. 


      스크립트나 명령에는 Trap 문이 여러 개 있을 수 있습니다. Trap 문은 스크립트나 명령의 어느 위치에든 나타날 수 
      있습니다. 


  모든 종료 오류 트래핑

      스크립트나 명령에서 처리되지 않은 종료 오류가 발생하는 경우 Windows PowerShell은 오류를 처리하는 
      Trap 문을 확인합니다. Trap 문이 있으면 Windows PowerShell은 Trap 문에 있는 스크립트나 명령을 
      계속 실행합니다.
 

      매우 간단한 Trap 문의 예는 다음과 같습니다.

          trap {"Error found."}


      이 Trap 문은 모든 종료 오류를 트래핑합니다. 이 Trap 문이 포함된 함수의 예는 다음과 같습니다.

          function TrapTest {
              trap {"Error found."}
              nonsenseString
              }


      이 함수에는 오류를 발생시키는 의미 없는 문자열이 포함되어 있습니다. 이 함수를 실행하면 다음과 같이 반환됩니다.

          C:\PS> TrapTest
          Error found.


      다음 예제에는 $_ 자동 변수를 사용하여 오류를 표시하는 Trap 문이 포함되어 있습니다.

          function TrapTest {
              trap {"Error found: $_"}
              nonsenseString
              }


      이 버전의 함수를 실행하면 다음과 같이 반환됩니다.

          C:\PS> TrapTest
          Error found: 'nonsenseString' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 
          프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 
          올바른지 확인한 다음 다시 시도하십시오. 


      Trap 문은 더 복잡할 수도 있습니다. Trap 문은 여러 조건이나 함수 호출을 포함할 수 있으며 다른 
      프로그램을 로깅 또는 테스트하거나 실행까지 할 수 있습니다.


   지정된 종료 오류 트래핑

      CommandNotFoundException 오류 유형을 트래핑하는 Trap 문의 예는 다음과 같습니다.

          trap [System.Management.Automation.CommandNotFoundException]
           {"Command error trapped"}


      함수나 스크립트에서 알려진 명령과 일치하지 않는 문자열을 검색하는 경우 이 Trap 문은 
      "Command error trapped" 문자열을 표시합니다. Trap 문 목록에 있는 문을 실행한 후 
      Windows PowerShell은 오류 개체를 오류 스트림에 기록한 다음 스크립트를 계속 실행합니다.


      Windows PowerShell은 Microsoft .NET Framework 예외 유형을 사용합니다. 다음 예제에서는 
      System.Exception 오류 유형을 지정합니다.

          trap [System.Exception] {"An error trapped"}


      CommandNotFoundException 오류 유형은 System.Exception 유형에서 상속합니다. 이 문은 알 수 없는 
      명령을 통해 생성된 오류를 트래핑하고 다른 오류 유형도 트래핑합니다.


      스크립트에는 Trap 문이 두 개 이상 포함될 수 있습니다. 각 오류는 Trap 문을 하나만 사용하여 트래핑할 수 
      있습니다. 오류가 발생하는 경우 두 개 이상의 Trap 문을 사용할 수 있으면 Windows PowerShell은 오류와 
      일치하는 가장 특정한 오류 유형이 포함된 Trap 문을 사용합니다. 


      다음 스크립트 예제에는 오류가 포함되어 있습니다. 이 스크립트에는 모든 종료 오류를 트래핑하는 일반 Trap 
      문과 CommandNotFoundException 유형을 지정하는 특정 Trap 문이 있습니다.

          trap {"Other terminating error trapped" }
          trap [System.Management.Automation.CommandNotFoundException] {"Command error trapped"}
          nonsenseString


      이 스크립트를 실행하면 다음과 같은 결과가 출력됩니다.

          Command error trapped
          'nonsenseString' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 
          않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 확인한 다음 다시 시도하십시오.
          위치 C:\PS>testScript1.ps1:3 문자:19
          +   nonsenseString <<<< 


      Windows PowerShell은 "nonsenseString"을 cmdlet 또는 기타 항목으로 인식하지 않기 때문에 
      CommandNotFoundException 오류를 반환합니다. 이 종료 오류는 특정 Trap 문을 통해 트래핑됩니다.


      다음 스크립트 예제에는 다른 오류가 포함된 동일한 Trap 문이 있습니다.

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


      이 스크립트를 실행하면 다음과 같은 결과가 출력됩니다.

          Other terminating error trapped
          0으로 나누려 했습니다.
          위치 C:PS> errorX.ps1:3 문자:7
          +   1/ <<<< $null


      0으로 나누려고 하면 CommandNotFoundException 오류가 생성되지 않습니다. 대신 이 오류는 모든 
      종료 오류를 트래핑하는 다른 Trap 문을 통해 트래핑됩니다. 


  오류 및 범위 트래핑

      종료 오류가 Trap 문과 동일한 범위에서 발생하는 경우 Trap 문을 실행한 후 Windows PowerShell은 
      오류 뒤의 문을 계속 실행합니다. Trap 문이 오류와 다른 범위에 있는 경우에는 Trap 문과 동일한 
      범위에 있는 다음 문에서 실행이 계속됩니다.
 

      예를 들어 함수에서 오류가 발생하는 경우 Trap 문이 해당 함수에 있으면 스크립트가 다음 문에서 계속 
      실행됩니다. 다음 스크립트에는 오류와 Trap 문이 포함되어 있습니다.

          function function1 {
              trap { "An error: " }
              NonsenseString
              "function1 was completed"
              }


      스크립트의 뒷부분에서 Function1 함수를 실행하면 다음과 같은 결과가 출력됩니다. 

          function1
          An error: 
          'NonsenseString' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 
          인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 확인한 다음 다시 
          시도하십시오.
          위치 C:\PS>TestScript1.ps1:3 문자:19
          +   NonsenseString <<<<

          function1 was completed 
 

      이 함수의 Trap 문은 오류를 트래핑합니다. 메시지를 표시한 후 Windows PowerShell은 함수 실행을 다시 
      시작합니다. Function1은 완료되었습니다.


      이 예제를 동일한 오류와 Trap 문이 있는 다음 예제와 비교하십시오. 이 예제에서는 Trap 문이 함수 
      외부에 있습니다.

          function function2 {
              NonsenseString
              "function2 was completed"
              }

          trap { "An error: " }
              . . .
          function2


      스크립트의 뒷부분에서 Function2 함수를 실행하면 다음과 같은 결과가 출력됩니다.

          An error: 
          'NonsenseString' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 
          인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 확인한 다음 다시 
          시도하십시오.
          위치 C:\PS>TestScript2.ps1:4 문자:19
          +   NonsenseString <<<<


      이 예제에서는 "function2 was completed" 명령이 실행되지 않았습니다. 두 종료 오류가 모두 
      함수 내에서 발생하지만 Trap 문이 함수 외부에 있으면 Windows PowerShell은 Trap 문이 실행된 
      후 함수로 돌아가지 않습니다.


  Break 및 Continue 키워드 사용

      Trap 문에서 Break 및 Continue 키워드를 사용하여 스크립트나 명령이 종료 오류 뒤에 계속 실행되는지 
      여부를 결정할 수 있습니다. 


      Trap 문 목록에 Break 문을 포함하는 경우 Windows PowerShell은 함수나 스크립트를 중지합니다. 
      다음 샘플 함수는 Trap 문에서 Break 키워드를 사용합니다.

          C:\PS> function break_example {
              trap {"Error trapped"; break;}
              1/$null
              "Function completed."
              }

          C:\PS> break_example
          Error trapped
          0으로 나누려 했습니다.
          줄:4 문자:7


      Trap 문에 Break 키워드가 포함되었기 때문에 이 함수는 계속 실행되지 않고 "Function completed" 
      줄이 실행되지 않습니다.


      Trap 문에 Continue 문을 포함하는 경우 Windows PowerShell은 Break 또는 Continue를 사용하지 않은 
      것처럼 오류를 발생시킨 문 뒤에서 다시 시작됩니다. 그러나 Continue 키워드를 사용하는 경우에는 
      Windows PowerShell에서 오류를 오류 스트림에 기록하지 않습니다. 


      다음 샘플 함수는 Trap 문에서 Continue 키워드를 사용합니다.

          C:\PS> function continue_example {
              trap {"Error trapped"; continue;}
              1/$null
              "Function completed."}

          C:\PS> continue_example
          Error trapped
          Function completed.  


      이 함수는 오류가 트래핑된 후 다시 시작되고 "Function completed" 문이 실행됩니다. 오류가 오류 
      스트림에 기록됩니다. 


참고 항목
    about_Break
    about_Continue
    about_Throw
    about_Try_Catch_Finally
    about_Scopes




목차