다음을 통해 공유


Cmdlet 오류 보고

Cmdlet은 오류가 오류를 종료하는지 아니면 종료되지 않는 오류인지에 따라 다르게 오류를 보고해야 합니다. 종료 오류는 파이프라인이 즉시 종료되도록 하는 오류 또는 처리를 계속할 이유가 없을 때 발생하는 오류입니다. 비결정 오류는 현재 오류 조건을 보고하는 오류이지만 cmdlet은 입력 개체를 계속 처리할 수 있습니다. 최종화되지 않은 오류가 발생하면 일반적으로 사용자에게 문제에 대한 알림이 표시되지만 cmdlet은 다음 입력 개체를 계속 처리합니다.

종료 및 종료되지 않는 오류

다음 지침을 사용하여 오류 조건이 종료 오류인지 아니면 종료되지 않는 오류인지 확인할 수 있습니다.

  • 오류 조건으로 인해 cmdlet이 추가 입력 개체를 성공적으로 처리할 수 없나요? 이 경우 종료 오류입니다.

  • 오류 조건이 특정 입력 개체 또는 입력 개체의 하위 집합과 관련이 있나요? 이 경우 이는 해석할 수 없는 오류입니다.

  • cmdlet이 다른 입력 개체에서 처리가 성공할 수 있는 여러 입력 개체를 허용하나요? 이 경우 이는 해석할 수 없는 오류입니다.

  • 여러 입력 개체를 허용할 수 있는 Cmdlet은 특정 상황이 단일 입력 개체에만 적용되는 경우에도 종료 오류와 종료되지 않는 오류 중에서 결정해야 합니다.

  • cmdlet은 종료 예외를 throw하기 전에 임의의 수의 입력 개체를 수신하고 성공 또는 오류 개체를 보낼 수 있습니다. 수신된 입력 개체 수와 보낸 성공 및 오류 개체 수 간에는 관계가 없습니다.

  • 0-1 입력 개체만 허용하고 0-1 출력 개체만 생성할 수 있는 Cmdlet은 오류를 종료 오류로 처리하고 종료 예외를 생성해야 합니다.

비단일 오류 보고

종료되지 않는 오류 보고는 항상 cmdlet의 System.Management.Automation.Cmdlet.BeginProcessing 메서드 구현, System.Management.Automation.Cmdlet.ProcessRecord 메서드 또는 System.Management.Automation.Cmdlet.EndProcessing 메서드 내에서 수행해야 합니다. 이러한 유형의 오류는 오류 스트림에 오류 레코드를 보내는 System.Management.Automation.Cmdlet.WriteError 메서드를 호출하여 보고됩니다.

종료 오류 보고

종료 오류는 예외를 throw하거나 System.Management.Automation.Cmdlet.ThrowTerminatingError 메서드를 호출하여 보고됩니다. cmdlet은 OutOfMemory와 같은 예외를 catch하고 다시 throw할 수도 있지만 PowerShell 런타임에서도 예외를 catch하기 때문에 예외를 다시 throw할 필요는 없습니다.

상황과 관련된 문제에 대한 사용자 고유의 예외를 정의하거나 오류 레코드를 사용하여 기존 예외에 추가 정보를 추가할 수도 있습니다.

오류 레코드

PowerShell은 System.Management.Automation.ErrorRecord 개체를 통해 종속적이지 않은 오류 조건에 대해 설명합니다. 각 개체는 오류 범주 정보, 선택적 대상 개체 및 오류 조건에 대한 세부 정보를 제공합니다.

오류 식별자

오류 식별자는 cmdlet 내에서 오류 조건을 식별하는 간단한 문자열입니다. PowerShell은 이 식별자를 cmdlet 식별자에 결합하여 나중에 오류 스트림 또는 로깅 오류 필터링, 특정 오류에 응답할 때 또는 다른 사용자별 활동과 함께 사용할 수 있는 정규화된 오류 식별자를 만듭니다.

오류 식별자를 지정할 때는 다음 지침을 따라야 합니다.

  • 서로 다른 코드 경로에 서로 다른 매우 구체적인 오류 식별자를 할당합니다. System.Management.Automation.Cmdlet.WriteError 또는 System.Management.Automation.Cmdlet.ThrowTerminatingError를 호출하는 각 코드 경로에는 고유한 오류 식별자가 있어야 합니다.

  • 오류 식별자는 종료 및 종료되지 않는 오류 모두에 대해 CLR(공용 언어 런타임) 예외 형식에 고유해야 합니다.

  • cmdlet 또는 PowerShell 공급자 버전 간에 오류 식별자의 의미 체계를 변경하지 마세요. 오류 식별자의 의미 체계가 설정되면 cmdlet의 수명 주기 동안 일정하게 유지되어야 합니다.

  • 종료 오류의 경우 특정 CLR 예외 형식에 대해 고유한 오류 식별자를 사용합니다. 예외 형식이 변경되면 새 오류 식별자를 사용합니다.

  • 지정하지 않는 오류의 경우 특정 입력 개체에 대해 특정 오류 식별자를 사용합니다.

  • 보고되는 오류에 해당하는 식별자에 대한 텍스트를 선택합니다. 공백 또는 문장 부호를 사용하지 마세요.

  • 재현할 수 없는 오류 식별자를 생성하지 마세요. 예를 들어 프로세스 식별자를 포함하는 식별자를 생성하지 마세요. 오류 식별자는 동일한 문제가 발생한 다른 사용자가 본 식별자에 해당하는 경우에만 유용합니다.

오류 범주

오류 범주는 사용자에 대한 오류를 그룹화하기 위해 사용됩니다. PowerShell은 이러한 범주와 cmdlet을 정의하며 PowerShell 공급자는 오류 레코드를 생성할 때 이러한 범주와 cmdlet 중에서 선택해야 합니다.

사용할 수 있는 오류 범주에 대한 설명은 System.Management.Automation.ErrorCategory 열거형을 참조하세요. 일반적으로 가능하면 NoError, UndefinedErrorGenericError를 사용하지 않아야 합니다.

사용자가 CategoryView 로 설정할 때 범주에 따라 오류를 볼 수 $ErrorView 있습니다.

참고 항목

Cmdlet 개요

Cmdlet 출력 형식

Windows PowerShell 참조